On 14/04/12 22:20, julien2412 wrote:
Hello,

I reproduced the problem indicated by fdo#48368 and attached to the
bugtracker bt with symbols (see
https://bugs.freedesktop.org/attachment.cgi?id=59985&action=edit)

Here are the lines of basctl/source/basicide/basidesh.cxx which seem to
cause the problem :
     420         for ( sal_uLong nWin = 0; bCanClose&&  ( nWin<
aIDEWindowTable.size() ); nWin++ )
     421         {
     422             IDEBaseWindow* pWin = aIDEWindowTable[ nWin ];
     423             if ( !pWin->CanClose() )

I runned this on gdb and found this :
aIDEWindowTable.size() = 1 but even at the first loop, pWin is null so line
423 fails.

I searched about aIDEWindowTable and found this in
basctl/source/inc/basidesh.hxx :
      62 #if _SOLAR__PRIVATE
      63 typedef std::map<sal_uInt16, IDEBaseWindow*>  IDEWindowTable;
      64 #else
      65 typedef std::map<sal_uInt16, void*>  IDEWindowTable;
      66 #endif

So I propose this straight forward fix :
diff --git a/basctl/source/basicide/basidesh.cxx
b/basctl/source/basicide/basidesh.cxx
index e4dcd98..02e10c2 100644
--- a/basctl/source/basicide/basidesh.cxx
+++ b/basctl/source/basicide/basidesh.cxx
@@ -417,9 +417,9 @@ sal_uInt16 BasicIDEShell::PrepareClose( sal_Bool bUI,
sal_Bool bForBrowsing )
      else
      {
          sal_Bool bCanClose = sal_True;
-        for ( sal_uLong nWin = 0; bCanClose&&  ( nWin<
aIDEWindowTable.size() ); nWin++ )
+        for (IDEWindowTable::const_iterator it = aIDEWindowTable.begin();
bCanClose&&  (it != aIDEWindowTable.end()); ++it)
          {
-            IDEBaseWindow* pWin = aIDEWindowTable[ nWin ];
+            IDEBaseWindow* pWin = it->second;
              if ( !pWin->CanClose() )
              {
                  if ( !m_aCurLibName.isEmpty()&&  ( pWin->IsDocument(
m_aCurDocument ) || pWin->GetLibName() != m_aCurLibName ) )

I can commit and push on master of course but I'd like first your opinion
about this.

please commit looks like the correct fix to me ( on a side note can anyone remember what ( #if _SOLAR__PRIVATE ) is all about, I can't see any reason for it in the context of this code in anycase :-/ and would be tempted to delete it. And btw thanks, always a pleasure to come back from vacation to see something from the to do list fixed by someone else :-))) thanks again!!

Noel


_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to