]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/tarstrm.cpp
adding all encodings on mac
[wxWidgets.git] / src / common / tarstrm.cpp
index 32b55f3a7ba190e24539542eb85dfa77a1146452..033c34cf093a688d52a79b04effb627fb884304c 100644 (file)
@@ -26,7 +26,7 @@
 
 #include "wx/buffer.h"
 #include "wx/datetime.h"
-#include "wx/ptr_scpd.h"
+#include "wx/scopedptr.h"
 #include "wx/filename.h"
 #include "wx/thread.h"
 
@@ -362,7 +362,8 @@ static wxString wxTarUserName(int uid)
     wxCharBuffer buf(bufsize);
     struct passwd pw;
 
-    if (getpwuid_r(uid, &pw, buf.data(), bufsize, &ppw) == 0)
+    memset(&pw, 0, sizeof(pw));
+    if (getpwuid_r(uid, &pw, buf.data(), bufsize, &ppw) == 0 && pw.pw_name)
         return wxString(pw.pw_name, wxConvLibc);
 #else
     if ((ppw = getpwuid(uid)) != NULL)
@@ -384,7 +385,8 @@ static wxString wxTarGroupName(int gid)
     wxCharBuffer buf(bufsize);
     struct group gr;
 
-    if (getgrgid_r(gid, &gr, buf.data(), bufsize, &pgr) == 0)
+    memset(&gr, 0, sizeof(gr));
+    if (getgrgid_r(gid, &gr, buf.data(), bufsize, &pgr) == 0 && gr.gr_name)
         return wxString(gr.gr_name, wxConvLibc);
 #else
     if ((pgr = getgrgid(gid)) != NULL)
@@ -943,7 +945,7 @@ bool wxTarInputStream::ReadExtendedHeader(wxTarHeaderRecords*& recs)
     size_t recPos, recSize;
     bool ok = true;
 
-    for (recPos = 0; recPos < len; recPos += recSize) {
+    for (recPos = 0; recPos < len && ok; recPos += recSize) {
         char *pRec = buf.data() + recPos;
         char *p = pRec;