From 94c8faab9f5b7dfcf11b6a0084cf54029badb125 Mon Sep 17 00:00:00 2001
From: Jan Breuer <jan.breuer@jaybee.cz>
Date: 周日, 24 4月 2016 18:25:36 +0800
Subject: [PATCH] Fix tests for device dependent info, convert to strndup, fix out of bounds access

---
 libscpi/src/parser.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/libscpi/src/parser.c b/libscpi/src/parser.c
index 6d7f8a9..6ced497 100644
--- a/libscpi/src/parser.c
+++ b/libscpi/src/parser.c
@@ -219,11 +219,11 @@
                 result &= processCommand(context);
                 cmd_prev = state->programHeader;
             } else {
-                /* test */
                 /* place undefined header with error */
-                data[r ? (r - 1) : r] = 0;
-                SCPI_ErrorPushEx(context, SCPI_ERROR_UNDEFINED_HEADER, data);
-                //SCPI_ErrorPush(context, SCPI_ERROR_UNDEFINED_HEADER);
+                /* calculate length of errornouse header and trim \r\n */
+                size_t r2 = r;
+                while(r2 > 0 && (data[r2 - 1] == '\r' || data[r2 - 1] == '\n')) r2--;
+                SCPI_ErrorPushEx(context, SCPI_ERROR_UNDEFINED_HEADER, data, r2);
                 result = FALSE;
             }
         }
@@ -547,7 +547,7 @@
     result += writeDelimiter(context);
     result += writeData(context, "\"", 1);
 
-    for (i = 0; data[i] && outputlimit && (i < SCPIDEFINE_DESCRIPTION_MAX_PARTS); i++) {
+    for (i = 0; (i < SCPIDEFINE_DESCRIPTION_MAX_PARTS) && data[i] && outputlimit; i++) {
         if (i == 1) {
             result += writeSemicolon(context);
             outputlimit -= 1;

--
Gitblit v1.9.1