[yum-cvs] yum-metadata-parser xml-parser.c,1.15,1.16
James Bowes
jbowes at linux.duke.edu
Tue Jul 3 03:01:38 UTC 2007
Update of /home/groups/yum/cvs/yum-metadata-parser
In directory login1.linux.duke.edu:/tmp/cvs-serv6611
Modified Files:
xml-parser.c
Log Message:
Fix segfault in the xml parser
Index: xml-parser.c
===================================================================
RCS file: /home/groups/yum/cvs/yum-metadata-parser/xml-parser.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- xml-parser.c 3 Jun 2007 15:38:00 -0000 1.15
+++ xml-parser.c 3 Jul 2007 03:01:36 -0000 1.16
@@ -554,6 +554,24 @@
};
void
+sax_context_init (SAXContext *sctx,
+ const char *md_type,
+ CountFn count_callback,
+ PackageFn package_callback,
+ gpointer user_data,
+ GError **err)
+{
+ sctx->md_type = md_type;
+ sctx->error = err;
+ sctx->count_fn = count_callback;
+ sctx->package_fn = package_callback;
+ sctx->user_data = user_data;
+ sctx->current_package = NULL;
+ sctx->want_text = FALSE;
+ sctx->text_buffer = g_string_sized_new (PACKAGE_FIELD_SIZE);
+}
+
+void
yum_xml_parse_primary (const char *filename,
CountFn count_callback,
PackageFn package_callback,
@@ -561,30 +579,25 @@
GError **err)
{
PrimarySAXContext ctx;
- SAXContext sctx = ctx.sctx;
+ SAXContext *sctx = &ctx.sctx;
int rc;
- sctx.md_type = "primary.xml";
ctx.state = PRIMARY_PARSER_TOPLEVEL;
- sctx.error = err;
- sctx.count_fn = count_callback;
- sctx.package_fn = package_callback;
- sctx.user_data = user_data;
- sctx.current_package = NULL;
ctx.current_dep_list = NULL;
ctx.current_file = NULL;
- sctx.want_text = FALSE;
- sctx.text_buffer = g_string_sized_new (PACKAGE_FIELD_SIZE);
+
+ sax_context_init(sctx, "primary.xml", count_callback, package_callback,
+ user_data, err);
xmlSubstituteEntitiesDefault (1);
rc = xmlSAXUserParseFile (&primary_sax_handler, &ctx, filename);
- if (sctx.current_package) {
+ if (sctx->current_package) {
g_warning ("Incomplete package lost");
- package_free (sctx.current_package);
+ package_free (sctx->current_package);
}
- g_string_free (sctx.text_buffer, TRUE);
+ g_string_free (sctx->text_buffer, TRUE);
}
/*****************************************************************************/
@@ -803,33 +816,28 @@
GError **err)
{
FilelistSAXContext ctx;
- SAXContext sctx = ctx.sctx;
+ SAXContext *sctx = &ctx.sctx;
int rc;
- sctx.md_type = "filelists.xml";
ctx.state = FILELIST_PARSER_TOPLEVEL;
- sctx.error = err;
- sctx.count_fn = count_callback;
- sctx.package_fn = package_callback;
- sctx.user_data = user_data;
- sctx.current_package = NULL;
ctx.current_file = NULL;
- sctx.want_text = FALSE;
- sctx.text_buffer = g_string_sized_new (PACKAGE_FIELD_SIZE);
+
+ sax_context_init(sctx, "filelists.xml", count_callback, package_callback,
+ user_data, err);
xmlSubstituteEntitiesDefault (1);
rc = xmlSAXUserParseFile (&filelist_sax_handler, &ctx, filename);
- if (sctx.current_package) {
+ if (sctx->current_package) {
g_warning ("Incomplete package lost");
- package_free (sctx.current_package);
+ package_free (sctx->current_package);
}
if (ctx.current_file)
g_free (ctx.current_file);
- g_string_free (sctx.text_buffer, TRUE);
+ g_string_free (sctx->text_buffer, TRUE);
}
/*****************************************************************************/
@@ -1031,31 +1039,26 @@
GError **err)
{
OtherSAXContext ctx;
- SAXContext sctx = ctx.sctx;
+ SAXContext *sctx = &ctx.sctx;
int rc;
- sctx.md_type = "other.xml";
ctx.state = OTHER_PARSER_TOPLEVEL;
- sctx.error = err;
- sctx.count_fn = count_callback;
- sctx.package_fn = package_callback;
- sctx.user_data = user_data;
- sctx.current_package = NULL;
ctx.current_entry = NULL;
- sctx.want_text = FALSE;
- sctx.text_buffer = g_string_sized_new (PACKAGE_FIELD_SIZE);
+
+ sax_context_init(sctx, "other.xml", count_callback, package_callback,
+ user_data, err);
xmlSubstituteEntitiesDefault (1);
rc = xmlSAXUserParseFile (&other_sax_handler, &ctx, filename);
- if (sctx.current_package) {
+ if (sctx->current_package) {
g_warning ("Incomplete package lost");
- package_free (sctx.current_package);
+ package_free (sctx->current_package);
}
if (ctx.current_entry)
g_free (ctx.current_entry);
- g_string_free (sctx.text_buffer, TRUE);
+ g_string_free (sctx->text_buffer, TRUE);
}
More information about the Yum-cvs-commits
mailing list