Github user necouchman commented on a diff in the pull request: https://github.com/apache/guacamole-server/pull/154#discussion_r176919230 --- Diff: src/protocols/rdp/guac_rdpdr/rdpdr_printer.c --- @@ -141,18 +143,25 @@ static void guac_rdpdr_device_printer_announce_handler(guac_rdpdr_device* device Stream_Write(output_stream, "PRN1\0\0\0\0", 8); /* DOS name */ /* Printer data */ - Stream_Write_UINT32(output_stream, 24 + GUAC_PRINTER_DRIVER_LENGTH + GUAC_PRINTER_NAME_LENGTH); + int settings_length = guac_utf8_strlen(device->device_name); + int printer_name_length = (settings_length + 1) * 2; + char* printer_name = malloc(printer_name_length); + guac_rdp_utf8_to_utf16((const unsigned char*)device->device_name, + settings_length, printer_name, printer_name_length); + printer_name[printer_name_length - 2] = '\0'; + printer_name[printer_name_length - 1] = '\0'; + Stream_Write_UINT32(output_stream, 24 + GUAC_PRINTER_DRIVER_LENGTH + printer_name_length); Stream_Write_UINT32(output_stream, RDPDR_PRINTER_ANNOUNCE_FLAG_DEFAULTPRINTER | RDPDR_PRINTER_ANNOUNCE_FLAG_NETWORKPRINTER); Stream_Write_UINT32(output_stream, 0); /* reserved - must be 0 */ Stream_Write_UINT32(output_stream, 0); /* PnPName length (PnPName is ultimately ignored) */ Stream_Write_UINT32(output_stream, GUAC_PRINTER_DRIVER_LENGTH); /* DriverName length */ - Stream_Write_UINT32(output_stream, GUAC_PRINTER_NAME_LENGTH); /* PrinterName length */ + Stream_Write_UINT32(output_stream, printer_name_length); /* PrinterName length */ Stream_Write_UINT32(output_stream, 0); /* CachedFields length */ Stream_Write(output_stream, GUAC_PRINTER_DRIVER, GUAC_PRINTER_DRIVER_LENGTH); - Stream_Write(output_stream, GUAC_PRINTER_NAME, GUAC_PRINTER_NAME_LENGTH); + Stream_Write(output_stream, printer_name, printer_name_length); --- End diff -- Okay, took an initial stab at a calculation...I'm sure it needs some work.
---