This appears to be an issue with Word2000 handling of empty attributes.
A reproduction case can be seen here:
```
$ cat test.html
<html xmlns:o="urn:schemas-microsoft-com:office:office">
<body>
<table>
<img class="" />
</table>
</body>
</html>
$ ./tidy --tidy-mark no --word-2000 yes test.html
line 1 column 1 - Warning: missing <!DOCTYPE> declaration
line 3 column 1 - Warning: <img> isn't allowed in <table> elements
line 2 column 1 - Info: <table> previously mentioned
line 1 column 57 - Warning: inserting missing 'title' element
line 3 column 1 - Warning: <img> lacks "alt" attribute
line 3 column 1 - Warning: <img> lacks "src" attribute
line 2 column 1 - Warning: trimming empty <table>
line 1 column 1 - Warning: <html> proprietary attribute "xmlns:o"
[2] 52405 segmentation fault ./tidy --tidy-mark no --word-2000 yes test.html
```
This was called from 6f2fb6e0e7/src/clean.c (L1710).
(It is technically undefined behaviour to call strncmp with `NULL` pointers however).
result[6] is a fixed array of size 6, but in the process
of copying data into it, we clobber the last allocated byte.
Simplify some of the code by not calling redundant functions.
This bump also includes merge of #424 - licence fix, and #423 - add
__GLIBC__ to long HAS_FUTIME list.
And coincidentally #427 - an improved french translation!
These services can only be used when there is a document loaded, ie a
lexer created. But really should not be calling a Clean and Repair
service with no doc!
The file tidyenum.h has an attribute ID enumeration that must exactly
match the attribute_defs[] table in attrs.c.
Originally some attempt was made to keep this enum in some sort of order
but that should now be totally abandonned. Any 'new' attribute
enumerations should be added just above the last N_TIDY_ATTRIBS, and
likewise in the table, to avoid this problem.
In older versions of tidy, these headers were defined. Now, they are
renamed to tidybuffio.h and tidyplatform.h. This may be more of a
consistent naming scheme, but it breaks current software.
Re-add these headers and add compile time warning when such a header
is used.
According to the specs, each va_copy call should be matched by a va_end call
to ensure proper cleanup. Furthermore, since message filters might iterate
over the list of arguments, we should hand a new copy to each filter.
The problem was, with --hide-endtags yes, a conditional pprint buffer
flush had nothing to flush, thus the indent was not adjusted.
To track down this bug added a lot of MSVC Debug code, but is only
existing if some additional items defined, so has no effect on the release
code.
This, what feels like a good fix, was first reported about 12 years ago by
@OlafvdSpek in SF Bugs 563. Hopefully finally closed.