OSDN Git Service

Fix A2W stack crash problem
authorFrank Li <lznuaa@gmail.com>
Wed, 31 Dec 2008 15:38:54 +0000 (23:38 +0800)
committerFrank Li <lznuaa@gmail.com>
Wed, 31 Dec 2008 15:38:54 +0000 (23:38 +0800)
src/Git/Git.cpp
src/Git/Git.h
src/TortoiseProc/TortoiseProc.vcproj.FSL.B20596.user

index f475f5d..b33a266 100644 (file)
@@ -14,7 +14,8 @@ CGit::~CGit(void)
 {\r
 }\r
 \r
-char buffer[4096];\r
+static char g_Buffer[4096];\r
+\r
 int CGit::RunAsync(CString cmd,PROCESS_INFORMATION *piOut,HANDLE *hReadOut,CString *StdioFile)\r
 {\r
        SECURITY_ATTRIBUTES sa;\r
@@ -68,6 +69,15 @@ int CGit::RunAsync(CString cmd,PROCESS_INFORMATION *piOut,HANDLE *hReadOut,CStri
        return 0;\r
 \r
 }\r
+//Must use sperate function to convert ANSI str to union code string\r
+//Becuase A2W use stack as internal convert buffer. \r
+void CGit::StringAppend(CString *str,char *p)\r
+{\r
+       USES_CONVERSION;\r
+       str->Append(A2W(p));\r
+\r
+}\r
+\r
 int CGit::Run(CString cmd, CString* output)\r
 {\r
        PROCESS_INFORMATION pi;\r
@@ -76,11 +86,10 @@ int CGit::Run(CString cmd, CString* output)
                return GIT_ERROR_CREATE_PROCESS;\r
 \r
        DWORD readnumber;\r
-       while(ReadFile(hRead,buffer,4090,&readnumber,NULL))\r
+       while(ReadFile(hRead,g_Buffer,1023,&readnumber,NULL))\r
        {\r
-               buffer[readnumber]=0;\r
-               USES_CONVERSION;\r
-               output->Append(A2W(buffer));\r
+               g_Buffer[readnumber]=0;\r
+               StringAppend(output,g_Buffer);\r
        }\r
 \r
        \r
index 748ee10..d01987f 100644 (file)
@@ -54,7 +54,7 @@ public:
 \r
        int BuildOutputFormat(CString &format,bool IsFull=TRUE);\r
        int GetShortLog(CString &log,CTGitPath * path=NULL, int count =-1);\r
-       \r
+       static void StringAppend(CString *str,char *p);\r
        \r
 };\r
 extern void GetTempPath(CString &path);\r
index 199d68e..adccdad 100644 (file)
@@ -11,7 +11,7 @@
                        <DebugSettings\r
                                Command="$(TargetPath)"\r
                                WorkingDirectory="D:\Profiles\b20596\tortoisegit"\r
-                               CommandArguments="/command:prevdiff /path:&quot;D:\\Profiles\\b20596\\buildtest\\TortoiseGit\\build.txt&quot;"\r
+                               CommandArguments="/command:log /path:&quot;C:\\WINCE600&quot;"\r
                                Attach="false"\r
                                DebuggerType="3"\r
                                Remote="1"\r