From 62d9eab60c5e363acecf3689f13aa2f552159722 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 19 Feb 2005 16:53:49 +0000 Subject: [PATCH] fixed hash collisions in ZIP files (patch 1082026) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32193 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/fs_zip.h | 6 +++++- src/common/fs_zip.cpp | 9 +++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/include/wx/fs_zip.h b/include/wx/fs_zip.h index d449cb072a..3276be7186 100644 --- a/include/wx/fs_zip.h +++ b/include/wx/fs_zip.h @@ -21,6 +21,10 @@ #include "wx/filesys.h" #include "wx/hashmap.h" + +WX_DECLARE_STRING_HASH_MAP(int, wxZipFilenameHashMap); + + //--------------------------------------------------------------------------- // wxZipFSHandler //--------------------------------------------------------------------------- @@ -40,7 +44,7 @@ class WXDLLIMPEXP_BASE wxZipFSHandler : public wxFileSystemHandler class wxZipInputStream *m_Archive; wxString m_Pattern, m_BaseDir, m_ZipFile; bool m_AllowDirs, m_AllowFiles; - wxLongToLongHashMap *m_DirsFound; + wxZipFilenameHashMap *m_DirsFound; wxString DoFind(); void CloseArchive(class wxZipInputStream *archive); diff --git a/src/common/fs_zip.cpp b/src/common/fs_zip.cpp index 136cbb9d37..d2210718ce 100644 --- a/src/common/fs_zip.cpp +++ b/src/common/fs_zip.cpp @@ -166,7 +166,7 @@ wxString wxZipFSHandler::FindFirst(const wxString& spec, int flags) if (m_AllowDirs) { delete m_DirsFound; - m_DirsFound = new wxLongToLongHashMap(); + m_DirsFound = new wxZipFilenameHashMap(); } return DoFind(); } @@ -205,12 +205,9 @@ wxString wxZipFSHandler::DoFind() dir = namestr.BeforeLast(wxT('/')); while (!dir.IsEmpty()) { - long key = 0; - for (size_t i = 0; i < dir.Length(); i++) key += (wxUChar)dir[i]; - wxLongToLongHashMap::iterator it = m_DirsFound->find(key); - if (it == m_DirsFound->end()) + if( m_DirsFound->find(dir) == m_DirsFound->end() ) { - (*m_DirsFound)[key] = 1; + (*m_DirsFound)[dir] = 1; filename = dir.AfterLast(wxT('/')); dir = dir.BeforeLast(wxT('/')); if (!filename.IsEmpty() && m_BaseDir == dir && -- 2.50.0