[gimp/gimp-2-10] libgimpconfig: fix float parsing in gimp_config_deserialize_fundamental() too



commit 82450330f0165e0a0fe9c46b597402a387694383
Author: Michael Natterer <mitch gimp org>
Date:   Tue Jul 30 18:36:20 2019 +0200

    libgimpconfig: fix float parsing in gimp_config_deserialize_fundamental() too
    
    (cherry picked from commit 2d471ce04927058a405d25d0a5922bda4a67db3b)

 libgimpconfig/gimpconfig-deserialize.c | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)
---
diff --git a/libgimpconfig/gimpconfig-deserialize.c b/libgimpconfig/gimpconfig-deserialize.c
index 58de4d634f..5d7707c779 100644
--- a/libgimpconfig/gimpconfig-deserialize.c
+++ b/libgimpconfig/gimpconfig-deserialize.c
@@ -390,6 +390,7 @@ gimp_config_deserialize_fundamental (GValue     *value,
                                      GScanner   *scanner)
 {
   GTokenType token;
+  GTokenType next_token;
   GType      value_type;
   gboolean   negate = FALSE;
 
@@ -435,7 +436,13 @@ gimp_config_deserialize_fundamental (GValue     *value,
       break;
     }
 
-  if (g_scanner_peek_next_token (scanner) != token)
+  next_token = g_scanner_peek_next_token (scanner);
+
+  /* we parse integers into floats too, because g_ascii_dtostr()
+   * serialized whole number without decimal point
+   */
+  if (next_token != token &&
+      ! (token == G_TOKEN_FLOAT && next_token == G_TOKEN_INT))
     {
       return token;
     }
@@ -497,12 +504,21 @@ gimp_config_deserialize_fundamental (GValue     *value,
       break;
 
     case G_TYPE_FLOAT:
-      g_value_set_float (value, negate ?
-                         - scanner->value.v_float : scanner->value.v_float);
+      if (next_token == G_TOKEN_FLOAT)
+        g_value_set_float (value, negate ?
+                           - scanner->value.v_float : scanner->value.v_float);
+      else
+        g_value_set_float (value, negate ?
+                           - scanner->value.v_int : scanner->value.v_int);
       break;
+
     case G_TYPE_DOUBLE:
-      g_value_set_double (value, negate ?
-                          - scanner->value.v_float: scanner->value.v_float);
+      if (next_token == G_TOKEN_FLOAT)
+        g_value_set_double (value, negate ?
+                            - scanner->value.v_float: scanner->value.v_float);
+      else
+        g_value_set_double (value, negate ?
+                            - scanner->value.v_int: scanner->value.v_int);
       break;
 
     default:


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]