[glib] Fix bug in strinfo
- From: Ryan Lortie <ryanl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] Fix bug in strinfo
- Date: Sat, 19 Jun 2010 15:41:32 +0000 (UTC)
commit a7689537605ade51b19be76baa3fba303527483d
Author: Ryan Lortie <desrt desrt ca>
Date: Sat Jun 19 11:38:57 2010 -0400
Fix bug in strinfo
We can't search for a larger needle inside of a smaller haystack, and
unsigned integer subtraction tends to result in very large numbers
rather than small ones.
Add a check for this case and abort out immediately.
Also add a test case (lifted directly from the docs) that demonstrates
the problem.
Issue discovered and tracked down by Milan Bouchet-Valat
gio/strinfo.c | 3 ++
gio/tests/gschema-compile.c | 3 +-
gio/tests/schema-tests/from-docs.gschema.xml | 34 ++++++++++++++++++++++++++
3 files changed, 39 insertions(+), 1 deletions(-)
---
diff --git a/gio/strinfo.c b/gio/strinfo.c
index 9ba18aa..f762fc5 100644
--- a/gio/strinfo.c
+++ b/gio/strinfo.c
@@ -147,6 +147,9 @@ strinfo_scan (const guint32 *strinfo,
{
guint i = 0;
+ if (length < n_words)
+ return -1;
+
while (i <= length - n_words)
{
guint j = 0;
diff --git a/gio/tests/gschema-compile.c b/gio/tests/gschema-compile.c
index 477bab9..48d0ffb 100644
--- a/gio/tests/gschema-compile.c
+++ b/gio/tests/gschema-compile.c
@@ -91,7 +91,8 @@ static const SchemaTest tests[] = {
{ "range-high-default", NULL, "*<default> is not contained in the specified range*" },
{ "range-default-low", NULL, "*<default> is not contained in the specified range*" },
{ "range-default-high", NULL, "*<default> is not contained in the specified range*" },
- { "range-parse-error", NULL, "*invalid character in number*" }
+ { "range-parse-error", NULL, "*invalid character in number*" },
+ { "from-docs", NULL, NULL }
};
int
diff --git a/gio/tests/schema-tests/from-docs.gschema.xml b/gio/tests/schema-tests/from-docs.gschema.xml
new file mode 100644
index 0000000..4fe45c7
--- /dev/null
+++ b/gio/tests/schema-tests/from-docs.gschema.xml
@@ -0,0 +1,34 @@
+<schemalist>
+ <!-- from the GSettings docs. Should work, I guess :) -->
+
+ <enum id="myenum">
+ <value nick="first" value="1"/>
+ <value nick="second" value="2"/>
+ </enum>
+
+ <schema id="org.gtk.test">
+
+ <key name="key-with-range" type="i">
+ <range min="1" max="100"/>
+ <default>10</default>
+ </key>
+
+ <key name="key-with-choices" type="s">
+ <choices>
+ <choice value='Elisabeth'/>
+ <choice value='Annabeth'/>
+ <choice value='Joe'/>
+ </choices>
+ <aliases>
+ <alias value='Anna' target='Annabeth'/>
+ <alias value='Beth' target='Elisabeth'/>
+ </aliases>
+ <default>'Joe'</default>
+ </key>
+
+ <key name='enumerated-key' enum='myenum'>
+ <default>'first'</default>
+ </key>
+
+ </schema>
+</schemalist>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]