aboutsummaryrefslogtreecommitdiff
path: root/jim.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2022-04-12 07:32:32 +1000
committerSteve Bennett <steveb@workware.net.au>2022-04-12 07:34:09 +1000
commit15a1851fbe5ebfde44a0c4a13ef95fdda5edd6c8 (patch)
tree473b69ad96f680afdb569df918a09347af3adfdc /jim.c
parent5c6703fc637f10f1bbba8fb079f5fdd188ff4efb (diff)
downloadjimtcl-15a1851fbe5ebfde44a0c4a13ef95fdda5edd6c8.zip
jimtcl-15a1851fbe5ebfde44a0c4a13ef95fdda5edd6c8.tar.gz
jimtcl-15a1851fbe5ebfde44a0c4a13ef95fdda5edd6c8.tar.bz2
getref, setref: No need to allow for leading, trailing space
There is no reason to allow a reference to contain leading and/or trailing white space, so remove this check and simply treat it as an invalid reference. Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim.c')
-rw-r--r--jim.c21
1 files changed, 6 insertions, 15 deletions
diff --git a/jim.c b/jim.c
index e896804..d818bb8 100644
--- a/jim.c
+++ b/jim.c
@@ -5317,7 +5317,7 @@ static int SetReferenceFromAny(Jim_Interp *interp, Jim_Obj *objPtr)
{
unsigned long value;
int i, len;
- const char *str, *start, *end;
+ const char *str;
char refId[21];
Jim_Reference *refPtr;
Jim_HashEntry *he;
@@ -5330,29 +5330,20 @@ static int SetReferenceFromAny(Jim_Interp *interp, Jim_Obj *objPtr)
len -= 2;
}
/* Check if it looks like a reference */
- if (len < JIM_REFERENCE_SPACE)
- goto badformat;
- /* Trim spaces */
- start = str;
- end = str + len - 1;
- while (*start == ' ')
- start++;
- while (*end == ' ' && end > start)
- end--;
- if (end - start + 1 != JIM_REFERENCE_SPACE)
+ if (len != JIM_REFERENCE_SPACE)
goto badformat;
/* <reference.<1234567>.%020> */
- if (memcmp(start, "<reference.<", 12) != 0)
+ if (memcmp(str, "<reference.<", 12) != 0)
goto badformat;
- if (start[12 + JIM_REFERENCE_TAGLEN] != '>' || end[0] != '>')
+ if (str[12 + JIM_REFERENCE_TAGLEN] != '>' || str[len - 1] != '>')
goto badformat;
/* The tag can't contain chars other than a-zA-Z0-9 + '_'. */
for (i = 0; i < JIM_REFERENCE_TAGLEN; i++) {
- if (!isrefchar(start[12 + i]))
+ if (!isrefchar(str[12 + i]))
goto badformat;
}
/* Extract info from the reference. */
- memcpy(refId, start + 14 + JIM_REFERENCE_TAGLEN, 20);
+ memcpy(refId, str + 14 + JIM_REFERENCE_TAGLEN, 20);
refId[20] = '\0';
/* Try to convert the ID into an unsigned long */
value = strtoul(refId, &endptr, 10);