From d2ffd850d2386b82a7c42bd68e689035a9ccd3d4 Mon Sep 17 00:00:00 2001 From: avolkov Date: Tue, 17 May 2005 05:09:26 +0000 Subject: [PATCH] Fixes a double-free and a 0-length memcpy() when a bad timestamp file encountered git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@1797 8092fc87-c524-0410-9efc-e669fe64eaf9 --- sc2/src/sc2code/libs/strings/getstr.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sc2/src/sc2code/libs/strings/getstr.c b/sc2/src/sc2code/libs/strings/getstr.c index bbb62f63f..503ca1a0f 100644 --- a/sc2/src/sc2code/libs/strings/getstr.c +++ b/sc2/src/sc2code/libs/strings/getstr.c @@ -173,6 +173,7 @@ _GetStringData (uio_Stream *fp, DWORD length) fprintf (stderr, "Invalid timestamp data " "for '%s'. Disabling timestamps\n", s); HFree (ts_data); + ts_data = NULL; uio_fclose (timestamp_fp); timestamp_fp = NULL; TSOffs = 0; @@ -260,8 +261,10 @@ _GetStringData (uio_Stream *fp, DWORD length) strdata, StringOffs); memcpy ((BYTE *)&lpST->StringOffsets[(n + 1) * num_data_sets] + StringOffs, clipdata, ClipOffs); - memcpy ((BYTE *)&lpST->StringOffsets[(n + 1) * num_data_sets] - + StringOffs + ClipOffs, ts_data, TSOffs); + if (TSOffs) + memcpy ((BYTE *)&lpST->StringOffsets[ + (n + 1) * num_data_sets] + StringOffs + ClipOffs, + ts_data, TSOffs); TSOffs = ((BYTE *)&lpST->StringOffsets[(n + 1) * num_data_sets] - (BYTE *)lpST) + StringOffs + ClipOffs; ClipOffs = TSOffs - ClipOffs;