groff-commit
[Top][All Lists]
Advanced

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

[groff] 11/15: [libgroff]: Fix Savannah #61174.


From: G. Branden Robinson
Subject: [groff] 11/15: [libgroff]: Fix Savannah #61174.
Date: Fri, 17 Sep 2021 05:34:39 -0400 (EDT)

gbranden pushed a commit to branch master
in repository groff.

commit e97cdac9ddef51f8834e9eb32fedd44fdfac36cd
Author: G. Branden Robinson <g.branden.robinson@gmail.com>
AuthorDate: Fri Sep 17 16:23:55 2021 +1000

    [libgroff]: Fix Savannah #61174.
    
    * src/libs/libgroff/font.cpp (font::load_desc): Emit correct line
      numbers when complaining of invalid `sizescale`, `hor`, or `vert`
      values in device description files.
    
    Fixes <https://savannah.gnu.org/bugs/?61174>.
---
 ChangeLog                  |  8 ++++++++
 src/libs/libgroff/font.cpp | 26 +++++++++++---------------
 2 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index ec8eeb3..1732526 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2021-09-17  G. Branden Robinson <g.branden.robinson@gmail.com>
 
+       * src/libs/libgroff/font.cpp (font::load_desc): Emit correct
+       line numbers when complaining of invalid `sizescale`, `hor`, or
+       `vert` values in device description files.
+
+       Fixes <https://savannah.gnu.org/bugs/?61174>.
+
+2021-09-17  G. Branden Robinson <g.branden.robinson@gmail.com>
+
        [libgroff]: Increase validation of device and font description
        files.
 
diff --git a/src/libs/libgroff/font.cpp b/src/libs/libgroff/font.cpp
index da8ca25..6baa85b 100644
--- a/src/libs/libgroff/font.cpp
+++ b/src/libs/libgroff/font.cpp
@@ -1061,12 +1061,20 @@ bool font::load_desc()
        t.error("missing value for directive '%1'", p);
        return false;
       }
-      //int *ptr = &(this->*(table[idx-1].ptr));
-      int *ptr = table[idx-1].ptr;
-      if (sscanf(q, "%d", ptr) != 1) {
+      int val;
+      if (sscanf(q, "%d", &val) != 1) {
        t.error("'%1' directive given invalid number '%2'", p, q);
        return false;
       }
+      if ((strcmp(p, "sizescale") == 0
+         || strcmp(p, "hor") == 0
+         || strcmp(p, "vert") == 0)
+         && val < 1) {
+       t.error("expected argument to '%1' directive to be a"
+               " nonnegative number, got '%2'", p, val);
+       return false;
+      }
+      *(table[idx-1].ptr) = val;
     }
     else if (strcmp("family", p) == 0) {
       p = strtok(0, WS);
@@ -1246,18 +1254,6 @@ bool font::load_desc()
     t.error("device description file missing 'sizes' directive");
     return false;
   }
-  if (sizescale < 1) {
-    t.error("invalid 'sizescale' value");
-    return false;
-  }
-  if (hor < 1) {
-    t.error("invalid 'hor' value");
-    return false;
-  }
-  if (vert < 1) {
-    t.error("invalid 'vert' value");
-    return false;
-  }
   return true;
 }
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]