summaryrefslogtreecommitdiff
path: root/src/char
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-12-23 03:29:59 +0300
committerAndrei Karas <akaras@inbox.ru>2015-12-23 03:29:59 +0300
commit750ec4a4e717b37a9a91990a9f06a3f071cc3fc6 (patch)
tree8fc96cbd28a1cc56dec7f99796443f90d1ce71fb /src/char
parent966ae872aed88253ae645c07b66ec6bd19d619df (diff)
parentfeff016d6bc7e811d03c958da754df20f630b33b (diff)
downloadhercules-750ec4a4e717b37a9a91990a9f06a3f071cc3fc6.tar.gz
hercules-750ec4a4e717b37a9a91990a9f06a3f071cc3fc6.tar.bz2
hercules-750ec4a4e717b37a9a91990a9f06a3f071cc3fc6.tar.xz
hercules-750ec4a4e717b37a9a91990a9f06a3f071cc3fc6.zip
Merge pull request #1003 from HerculesWS/865-var_length
Merge of #866 and #867
Diffstat (limited to 'src/char')
-rw-r--r--src/char/inter.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/char/inter.c b/src/char/inter.c
index 5b81a4732..87ecb4e6a 100644
--- a/src/char/inter.c
+++ b/src/char/inter.c
@@ -1186,7 +1186,7 @@ int mapif_parse_Registry(int fd)
if( count ) {
int cursor = 14, i;
- char key[32], sval[254];
+ char key[SCRIPT_VARNAME_LENGTH+1], sval[254];
bool isLoginActive = sockt->session_is_active(chr->login_fd);
if( isLoginActive )
@@ -1194,8 +1194,9 @@ int mapif_parse_Registry(int fd)
for(i = 0; i < count; i++) {
unsigned int index;
- safestrncpy(key, (char*)RFIFOP(fd, cursor + 1), RFIFOB(fd, cursor));
- cursor += RFIFOB(fd, cursor) + 1;
+ int len = RFIFOB(fd, cursor);
+ safestrncpy(key, (char*)RFIFOP(fd, cursor + 1), min((int)sizeof(key), len));
+ cursor += len + 1;
index = RFIFOL(fd, cursor);
cursor += 4;
@@ -1211,8 +1212,9 @@ int mapif_parse_Registry(int fd)
break;
/* str */
case 2:
- safestrncpy(sval, (char*)RFIFOP(fd, cursor + 1), RFIFOB(fd, cursor));
- cursor += RFIFOB(fd, cursor) + 1;
+ len = RFIFOB(fd, cursor);
+ safestrncpy(sval, (char*)RFIFOP(fd, cursor + 1), min((int)sizeof(sval), len));
+ cursor += len + 1;
inter->savereg(account_id,char_id,key,index,(intptr_t)sval,true);
break;
case 3: