When parsing a variable value within double quotes, allow parenthesis
authorlum <lum@openbsd.org>
Mon, 3 May 2021 13:28:03 +0000 (13:28 +0000)
committerlum <lum@openbsd.org>
Mon, 3 May 2021 13:28:03 +0000 (13:28 +0000)
to be accomodated for.

usr.bin/mg/interpreter.c

index d958cb5..1b99318 100644 (file)
@@ -1,4 +1,4 @@
-/*      $OpenBSD: interpreter.c,v 1.23 2021/05/03 12:18:43 lum Exp $   */
+/*      $OpenBSD: interpreter.c,v 1.24 2021/05/03 13:28:03 lum Exp $   */
 /*
  * This file is in the public domain.
  *
@@ -158,48 +158,52 @@ foundparen(char *funstr, int llen)
                if (*p == '\\') {
                        esc = 1;
                } else if (*p == '(') {
-                       if (inquote != 0) {
+                       if (inquote == 0) {
+                               if (begp != NULL) {
+                                       if (endp == NULL)
+                                               *p = '\0';
+                                       else
+                                               *endp = '\0';
+
+                                       ret = parse(begp, lrp, &lp, blkid,
+                                           ++expctr);
+                                       if (!ret) {
+                                               cleanup();
+                                               return(ret);
+                                       }
+                               }
+                               lrp = &lp;
+                               begp = endp = NULL;
+                               pctr++;
+                       } else if (inquote != 1) {
                                cleanup();
                                return(dobeep_msg("Opening and closing quote "\
                                    "char error"));
                        }
-                       if (begp != NULL) {
-                               if (endp == NULL)
-                                       *p = '\0';
-                               else
-                                       *endp = '\0';
-
-                               ret = parse(begp, lrp, &lp, blkid, ++expctr);
-                               if (!ret) {
-                                       cleanup();
-                                       return(ret);
-                               }
-                       }
-                       lrp = &lp;
-                       begp = endp = NULL;
-                       pctr++;
                        esc = 0;
                } else if (*p == ')') {
-                       if (inquote != 0) {
+                       if (inquote == 0) {
+                               if (begp != NULL) {
+                                       if (endp == NULL)
+                                               *p = '\0';
+                                       else
+                                               *endp = '\0';
+
+                                       ret = parse(begp, lrp, &rp, blkid,
+                                           ++expctr);
+                                       if (!ret) {
+                                               cleanup();
+                                               return(ret);
+                                       }
+                               }
+                               lrp = &rp;
+                               begp = endp = NULL;
+                               pctr--;
+                       } else if (inquote != 1) {
                                cleanup();
                                return(dobeep_msg("Opening and closing quote "\
                                    "char error"));
                        }
-                       if (begp != NULL) {
-                               if (endp == NULL)
-                                       *p = '\0';
-                               else
-                                       *endp = '\0';
-
-                               ret = parse(begp, lrp, &rp, blkid, ++expctr);
-                               if (!ret) {
-                                       cleanup();
-                                       return(ret);
-                               }
-                       }
-                       lrp = &rp;
-                       begp = endp = NULL;
-                       pctr--;
                        esc = 0;
                } else if (*p != ' ' && *p != '\t') {
                        if (begp == NULL)