Fix gdbserver <library-list> and its #FIXED version="1.0"

While reimplementing <library-list/> I found from expat-2.0.1-11.fc15.x86_64:

warning: while parsing target library list (at line 1): Required attribute "version" of <library-list-svr4> not specified

I believe the same bug has to apply for existing FSF gdbserver but I do not
have any <library-list/> platform to test it (I did not try to build MinGW).

features/library-list.dtd:
<!ATTLIST library-list  version CDATA   #FIXED  "1.0">

http://www.xml.com/pub/a/98/10/guide0.html?page=3 says:

	In this case, the attribute is not required, but if it occurs, it must
	have the specified value.

Which would suggest gdbserver is right but solib-target.c is wrong.  One could
also make gdbserver explicit for the version (if those 14 bytes are not of
a concern).

gdb/ChangeLog
2015-06-10  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* solib-target.c (library_list_start_list): Do not dereference
	variable version in its initialization.  Make the VERSION check handle
	NULL.
	(library_list_attributes): Make "version" GDB_XML_AF_OPTIONAL.

gdb/gdbserver/ChangeLog
2015-06-10  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* server.c (handle_qxfer_libraries): Set `version' attribute for
	<library-list>.
This commit is contained in:
Jan Kratochvil 2015-06-10 18:29:05 +02:00
parent 51aad7cc44
commit 24c05f4605
4 changed files with 25 additions and 7 deletions

View file

@ -146,12 +146,18 @@ library_list_start_list (struct gdb_xml_parser *parser,
const struct gdb_xml_element *element,
void *user_data, VEC(gdb_xml_value_s) *attributes)
{
char *version = xml_find_attribute (attributes, "version")->value;
struct gdb_xml_value *version = xml_find_attribute (attributes, "version");
if (strcmp (version, "1.0") != 0)
gdb_xml_error (parser,
_("Library list has unsupported version \"%s\""),
version);
/* #FIXED attribute may be omitted, Expat returns NULL in such case. */
if (version)
{
const char *string = version->value;
if (strcmp (string, "1.0") != 0)
gdb_xml_error (parser,
_("Library list has unsupported version \"%s\""),
version);
}
}
/* Discard the constructed library list. */
@ -210,7 +216,7 @@ static const struct gdb_xml_element library_list_children[] = {
};
static const struct gdb_xml_attribute library_list_attributes[] = {
{ "version", GDB_XML_AF_NONE, NULL, NULL },
{ "version", GDB_XML_AF_OPTIONAL, NULL, NULL },
{ NULL, GDB_XML_AF_NONE, NULL, NULL }
};