In the midst of composing a commit message about how I reorganized some of genl_putmixed()'s code without finding any problem, I realized that there was a problem. The character immediately after \G12345678 would be copied directly to the output buffer without examination. If that was the leading backslash for a second encoded sequence, the G and the hex digits would follow their backslash as just ordinary chars, which is not what's intended. Or if instead of a backslash the next character was the input's terminating '\0', the latter would be copied into the output and the pointer to the input string would be incremented, then the next loop iteraction would examined whatever followed. If valgrind is smart enough--and it seems to be--it would complain about accessing a character that putmixed()'s caller hadn't initialized. The only use of putmixed() I'm sure about is the what-is code showing a screen symbol with its explanation, which doesn't exercise either \G12345678\G12345678 or \G12345678\0. I didn't go hunting to see if there was someplace that might have an encoded symbol at the end of the string. what-is still works after this patch.... The only substantive change is adding ``continue'' but I haven't gone back and undone the reorg that preceded it.
11 KiB
11 KiB