From: Benjamin Otte Date: Tue, 6 May 2003 22:58:04 +0000 (+0000) Subject: do error checking for int/float values and don't accept trailing characters, but... X-Git-Tag: BRANCH-ERROR-ROOT~243 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fe3861c2d39c2c96002f1771d3f9fa1374cf6da9;p=platform%2Fupstream%2Fgstreamer.git do error checking for int/float values and don't accept trailing characters, but do accept overflows Original commit message from CVS: do error checking for int/float values and don't accept trailing characters, but do accept overflows --- diff --git a/gst/parse/grammar.y b/gst/parse/grammar.y index 12a8a0d..7bd6e2f 100644 --- a/gst/parse/grammar.y +++ b/gst/parse/grammar.y @@ -285,24 +285,39 @@ gst_parse_element_set (gchar *value, GstElement *element, graph_t *graph) } case G_TYPE_INT: case G_TYPE_LONG: - case G_TYPE_INT64: + case G_TYPE_INT64: { + gchar *endptr; + glong l; g_value_init (&v2, G_TYPE_LONG); - g_value_set_long (&v2, strtol (pos, NULL, 0)); - if (!g_value_transform (&v2, &v)) goto error; + l = strtol (pos, &endptr, 0); + if (*endptr != '\0') goto error_conversion; + g_value_set_long (&v2, l); + if (!g_value_transform (&v2, &v)) goto error_conversion; break; + } case G_TYPE_UINT: case G_TYPE_ULONG: - case G_TYPE_UINT64: + case G_TYPE_UINT64: { + gchar *endptr; + gulong ul; g_value_init (&v2, G_TYPE_ULONG); - g_value_set_ulong (&v2, strtoul (pos, NULL, 0)); - if (!g_value_transform (&v2, &v)) goto error; - break; + ul = strtoul (pos, &endptr, 0); + if (*endptr != '\0') goto error_conversion; + g_value_set_ulong (&v2, ul); + if (!g_value_transform (&v2, &v)) goto error_conversion; + break; + } case G_TYPE_FLOAT: - case G_TYPE_DOUBLE: + case G_TYPE_DOUBLE: { + gchar *endptr; + gdouble d; g_value_init (&v2, G_TYPE_DOUBLE); - g_value_set_double (&v2, atof (pos)); - if (!g_value_transform (&v2, &v)) goto error; - break; + d = strtod (pos, &endptr); + if (*endptr != '\0') goto error_conversion; + g_value_set_double (&v2, d); + if (!g_value_transform (&v2, &v)) goto error_conversion; + break; + } default: /* add more */ g_warning ("property \"%s\" in element %s cannot be set", value, GST_ELEMENT_NAME (element)); @@ -318,7 +333,14 @@ out: return; error: - ERROR (GST_PARSE_ERROR_COULD_NOT_SET_PROPERTY, "Could not set property \"%s\" in element \"%s\" to \"%s\"", value, GST_ELEMENT_NAME (element), pos); + ERROR (GST_PARSE_ERROR_COULD_NOT_SET_PROPERTY, + "Could not set property \"%s\" in element \"%s\" to \"%s\"", + value, GST_ELEMENT_NAME (element), pos); + goto out; +error_conversion: + ERROR (GST_PARSE_ERROR_COULD_NOT_SET_PROPERTY, + "Could not convert \"%s\" so that it fits property \"%s\" in element \"%s\"", + pos, value, GST_ELEMENT_NAME (element)); goto out; } static inline void