From b48939c51665e40f83dca205e70c06382ee726e7 Mon Sep 17 00:00:00 2001 From: sireus Date: Tue, 26 Apr 2011 14:40:09 +0000 Subject: [PATCH] substr crash fix & simplification git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@6361 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- source/src/command.cpp | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/source/src/command.cpp b/source/src/command.cpp index f99f5904..f79037d7 100644 --- a/source/src/command.cpp +++ b/source/src/command.cpp @@ -1268,26 +1268,12 @@ int millis_() { extern int totalmillis; return totalmillis; } void strlen_(char *s) { string r; formatstring(r)("%d", strlen(s)); result(r); } void substr_(char *fs, char *pa, char *len) { - int ia = atoi(pa); - int ilen = atoi(len); - string subq; - string subr; - subr[0] = '\0'; - if(ia>(int)strlen(fs)) - { - return; - } - if(ia>=0) - { - if(!ilen) - { - ilen = strlen(fs)-ia; - } - copystring(subq, fs + ia); - strncpy(subr, subq, ilen); - } - subr[ilen] = '\0'; - result(subr); + int ia = atoi(pa); + int ilen = atoi(len); + if(ia>(int)strlen(fs) || ia < 0 || ilen < 0) return; + + if(!ilen) ilen = strlen(fs)-ia; + result(newstring(fs + ia, ilen)); } void l0(int p, int v) { string f; string r; formatstring(f)("%%0%dd", p); formatstring(r)(f, v); result(r); }