More thorough error checking on library calls.
[gedcom-parse.git] / gedcom / gedcom_lex_common.c
index 109da8a1c33035ca9d26197fca562e45267c8ba3..1da7da2ee2a8f1eef5487325ba999d1702d8a36f 100644 (file)
@@ -310,10 +310,15 @@ int test_loop(ENCODING enc, char* code)
   { if (compat_at) {                                                          \
       int i, j;                                                               \
       char *yycopy = strdup(yytext);                                          \
-      for (i = 0; i < 2; i++)                                                 \
-        for (j = yyleng - 1; j >= 0; --j)                                     \
-          unput(yycopy[j]);                                                   \
-      free(yycopy);                                                           \
+      if (yycopy) {                                                           \
+        for (i = 0; i < 2; i++)                                               \
+          for (j = yyleng - 1; j >= 0; --j)                                   \
+            unput(yycopy[j]);                                                 \
+        free(yycopy);                                                         \
+      }                                                                       \
+      else {                                                                  \
+        MEMORY_ERROR;                                                         \
+      }                                                                       \
     }                                                                         \
     else {                                                                    \
       gedcom_error(_("'@' character should be written as '@@' in values"));   \