diff --git a/src/WINNT/afsd/afsd_init.c b/src/WINNT/afsd/afsd_init.c index a438fb101a..2ceefa9a19 100644 --- a/src/WINNT/afsd/afsd_init.c +++ b/src/WINNT/afsd/afsd_init.c @@ -279,26 +279,29 @@ configureBackConnectionHostNames(void) KEY_READ|KEY_WRITE, &hkMSV10) == ERROR_SUCCESS ) { - if (RegQueryValueEx( hkMSV10, "BackConnectionHostNames", 0, &dwType, NULL, &dwSize) == ERROR_SUCCESS) { - pHostNames = malloc(dwSize + strlen(cm_NetbiosName) + 1); - RegQueryValueEx( hkMSV10, "BackConnectionHostNames", 0, &dwType, pHostNames, &dwSize); - - for (pName = pHostNames; *pName ; pName += strlen(pName) + 1) - { - if ( !stricmp(pName, cm_NetbiosName) ) { - bNameFound = TRUE; - break; - } - } - } + if (RegQueryValueEx( hkMSV10, "BackConnectionHostNames", 0, + &dwType, NULL, &dwSize) == ERROR_SUCCESS) { + dwSize += strlen(cm_NetbiosName) + 1; + pHostNames = malloc(dwSize); + if (RegQueryValueEx( hkMSV10, "BackConnectionHostNames", 0, &dwType, + pHostNames, &dwSize) == ERROR_SUCCESS) { + for (pName = pHostNames; *pName ; pName += strlen(pName) + 1) + { + if ( !stricmp(pName, cm_NetbiosName) ) { + bNameFound = TRUE; + break; + } + } + } + } if ( !bNameFound ) { int size = strlen(cm_NetbiosName) + 2; if ( !pHostNames ) { pHostNames = malloc(size); - dwSize = 1; + dwSize = size; + pName = pHostNames; } - pName = pHostNames; StringCbCopyA(pName, size, cm_NetbiosName); pName += size - 1; *pName = '\0'; /* add a second nul terminator */ @@ -370,8 +373,12 @@ configureBackConnectionHostNames(void) } RegCloseKey(hkMSV10); } + + if (pHostNames) + free(pHostNames); } + #if !defined(DJGPP) static void afsd_InitServerPreferences(void) {