parseFromStream error in nsISAXXMLReader on trunk

RESOLVED FIXED in mozilla1.8.1beta2

Status

()

RESOLVED FIXED
13 years ago
12 years ago

People

(Reporter: sayrer, Assigned: sayrer)

Tracking

({fixed1.8.1})

Trunk
mozilla1.8.1beta2
x86
Windows XP
fixed1.8.1
Points:
---
Bug Flags:
blocking1.8.1 +

Firefox Tracking Flags

(Not tracked)

Details

Attachments

(1 attachment, 2 obsolete attachments)

(Assignee)

Description

13 years ago
ntdll.dll!7c901230()
       [Frames below may be incorrect and/or missing, no symbols loaded for
ntdll.dll]
>       xpcom_core.dll!Break(const char * aMsg=0x0012c898)  Line 471    C++
       xpcom_core.dll!NS_DebugBreak_P(unsigned int aSeverity=1, const char
* aStr=0x011bff38, const char * aExpr=0x011bbee8, const char *
aFile=0x011bff58, int aLine=148)  Line 350 + 0xc bytes  C++
       necko.dll!nsBaseChannel::SetURI(nsIURI * uri=0x00000000)  Line 148 +
0x22 bytes      C++
       necko.dll!nsInputStreamChannel::SetURI(nsIURI * uri=0x00000000)  Line 85        C++
       gkparser.dll!NS_NewInputStreamChannel(nsIChannel * *
result=0x0012cda4, nsIURI * uri=0x00000000, nsIInputStream *
stream=0x0358b3c0, const nsACString_internal & contentType={...},
const nsACString_internal * contentCharset=0x00000000)  Line 304 +
0x1d bytes      C++
       gkparser.dll!NS_NewInputStreamChannel(nsIChannel * *
result=0x0012cda4, nsIURI * uri=0x00000000, nsIInputStream *
stream=0x0358b3c0, const nsACString_internal & contentType={...})
Line 328 + 0x17 bytes   C++
       gkparser.dll!nsSAXXMLReader::ParseFromStream(nsIInputStream *
aStream=0x0358b3c0, const char * aCharset=0x028029dc, const char *
aContentType=0x0358ba48)  Line 436 + 0x3a bytes C++
       gkparser.dll!nsSAXXMLReader::ParseFromString(const
nsAString_internal & aStr={...}, const char * aContentType=0x0358ba48)
 Line 410 + 0x20 bytes  C++
       xpcom_core.dll!XPTC_InvokeByIndex(nsISupports * that=0x00000014,
unsigned int methodIndex=2, unsigned int paramCount=1232812,
nsXPTCVariant * params=0x0210ec0c)  Line 102    C++
       xpc3250.dll!XPCWrappedNative::CallMethod(XPCCallContext & ccx={...},
XPCWrappedNative::CallMode mode=20)  Line 2154 + 0x1e bytes     C++
       xpc3250.dll!XPCWrappedNative::CallMethod(XPCCallContext & ccx={...},
XPCWrappedNative::CallMode mode=CALL_METHOD)  Line 2154 + 0x1e
bytes   C++
       xpc3250.dll!XPC_WN_CallMethod(JSContext * cx=0x034e29e0, JSObject *
obj=0x0352ab00, unsigned int argc=2, long * argv=0x03713a70, long *
vp=0x0012d278)  Line 1450 + 0xe bytes   C++
       js3250.dll!js_Invoke(JSContext * cx=0x034e29e0, unsigned int argc=2,
unsigned int flags=0)  Line 1328 + 0x20 bytes   C
       js3250.dll!js_Interpret(JSContext * cx=0x034e29e0, unsigned char *
pc=0x03728a65, long * result=0x0012dde0)  Line 4021 + 0xf bytes C
       js3250.dll!js_Invoke(JSContext * cx=0x034e29e0, unsigned int argc=1,
unsigned int flags=2)  Line 1347 + 0x13 bytes   C
       js3250.dll!js_InternalInvoke(JSContext * cx=0x034e29e0, JSObject *
obj=0x0361d608, long fval=55095936, unsigned int flags=0, unsigned int
argc=1, long * argv=0x037139b8, long * rval=0x0012df24)  Line 1422 +
0x14 bytes      C
       js3250.dll!JS_CallFunctionValue(JSContext * cx=0x034e29e0, JSObject
* obj=0x0361d608, long fval=55095936, unsigned int argc=1, long *
argv=0x037139b8, long * rval=0x0012df24)  Line 4348 + 0x1f bytes        C
       gklayout.dll!nsJSContext::CallEventHandler(nsISupports *
aTarget=0x03728540, void * aScope=0x0359c018, void *
aHandler=0x0348b280, nsIArray * aargv=0x03628a28, nsIVariant * *
arv=0x0012e098)  Line 1585 + 0x21 bytes C++
       gklayout.dll!nsJSEventListener::HandleEvent(nsIDOMEvent *
aEvent=0x0359e4d4)  Line 211 + 0x62 bytes       C++
       gklayout.dll!nsEventListenerManager::HandleEventSubType(nsListenerStruct
* aListenerStruct=0x037220f0, nsIDOMEventListener *
aListener=0x037285f8, nsIDOMEvent * aDOMEvent=0x0359e4d4, nsISupports
* aCurrentTarget=0x03728540, unsigned int aSubType=8, unsigned int
aPhaseFlags=6)  Line 1648 + 0x12 bytes  C++
       gklayout.dll!nsEventListenerManager::HandleEvent(nsPresContext *
aPresContext=0x036a1880, nsEvent * aEvent=0x0012e940, nsIDOMEvent * *
aDOMEvent=0x0012e364, nsISupports * aCurrentTarget=0x03728540,
unsigned int aFlags=6, nsEventStatus * aEventStatus=0x0012e368)  Line
1752    C++
       gklayout.dll!nsEventTargetChainItem::HandleEvent(nsEventChainPostVisitor
& aVisitor={...}, unsigned int aFlags=6)  Line 335      C++
       gklayout.dll!nsEventTargetChainItem::HandleEventTargetChain(nsEventChainPostVisitor
& aVisitor={...}, unsigned int aFlags=6, nsDispatchingCallback *
aCallback=0x00000000)  Line 455 C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x00000000)  Line
401 + 0x12 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x00000000)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x00000000)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x00000000)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x00000000)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x00000000)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x00000000)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x00000000)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x00000000)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x00000000)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x00000000)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x00000000)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x00000000)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x00000000)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x00000000)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x00000000)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventDispatcher::Dispatch(nsISupports *
aTarget=0x03728540, nsPresContext * aPresContext=0x036a1880, nsEvent *
aEvent=0x0012e940, nsIDOMEvent * aDOMEvent=0x00000000, nsEventStatus *
aEventStatus=0x0012e93c, nsDispatchingCallback * aCallback=0x00000000,
int aTargetIsChromeHandler=0)  Line 575 + 0x10 bytes    C++
       gklayout.dll!PresShell::HandleDOMEventWithTarget(nsIContent *
aTargetContent=0x03728540, nsEvent * aEvent=0x0012e940, nsEventStatus
* aStatus=0x0012e93c)  Line 6279 + 0x1e bytes   C++
       gklayout.dll!nsButtonBoxFrame::DoMouseClick(nsGUIEvent *
aEvent=0x0012f104, int aTrustEvent=0)  Line 169 C++
       gklayout.dll!nsButtonBoxFrame::MouseClicked(nsPresContext *
aPresContext=0x036a1880, nsGUIEvent * aEvent=0x0012f104)  Line 62 +
0x15 bytes      C++
       gklayout.dll!nsButtonBoxFrame::HandleEvent(nsPresContext *
aPresContext=0x036a1880, nsGUIEvent * aEvent=0x0012f104, nsEventStatus
* aEventStatus=0x0012ea6c)  Line 141    C++
       gklayout.dll!nsPresShellEventCB::HandleEvent(nsEventChainPostVisitor
& aVisitor={...})  Line 1498    C++
       gklayout.dll!nsEventTargetChainItem::HandleEventTargetChain(nsEventChainPostVisitor
& aVisitor={...}, unsigned int aFlags=6, nsDispatchingCallback *
aCallback=0x0012f038)  Line 503 C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x0012f038)  Line
401 + 0x12 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x0012f038)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x0012f038)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x0012f038)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x0012f038)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x0012f038)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x0012f038)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x0012f038)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x0012f038)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x0012f038)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x0012f038)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x0012f038)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x0012f038)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x0012f038)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x0012f038)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventTargetChainItem::CreateChainAndHandleEvent(nsEventChainPreVisitor
& aVisitor={...}, nsDispatchingCallback * aCallback=0x0012f038)  Line
392 + 0x10 bytes        C++
       gklayout.dll!nsEventDispatcher::Dispatch(nsISupports *
aTarget=0x03728540, nsPresContext * aPresContext=0x036a1880, nsEvent *
aEvent=0x0012f104, nsIDOMEvent * aDOMEvent=0x00000000, nsEventStatus *
aEventStatus=0x0012f570, nsDispatchingCallback * aCallback=0x0012f038,
int aTargetIsChromeHandler=0)  Line 575 + 0x10 bytes    C++
       gklayout.dll!PresShell::HandleEventInternal(nsEvent *
aEvent=0x0012f104, nsIView * aView=0x00000000, nsEventStatus *
aStatus=0x0012f570)  Line 6236 + 0x2b bytes     C++
       gklayout.dll!PresShell::HandleEventWithTarget(nsEvent *
aEvent=0x0012f104, nsIFrame * aFrame=0x03773b2c, nsIContent *
aContent=0x03728540, nsEventStatus * aStatus=0x0012f570)  Line 6128 +
0x12 bytes      C++
       gklayout.dll!nsEventStateManager::CheckForAndDispatchClick(nsPresContext
* aPresContext=0x036a1880, nsMouseEvent * aEvent=0x0012f7ac,
nsEventStatus * aStatus=0x0012f570)  Line 3011 + 0x40 bytes     C++
       gklayout.dll!nsEventStateManager::PostHandleEvent(nsPresContext *
aPresContext=0x036a1880, nsEvent * aEvent=0x0012f7ac, nsIFrame *
aTargetFrame=0x03773b2c, nsEventStatus * aStatus=0x0012f570, nsIView *
aView=0x034cfe80)  Line 1961 + 0x1c bytes       C++
       gklayout.dll!PresShell::HandleEventInternal(nsEvent *
aEvent=0x0012f7ac, nsIView * aView=0x034cfe80, nsEventStatus *
aStatus=0x0012f570)  Line 6254 + 0x36 bytes     C++
       gklayout.dll!PresShell::HandlePositionedEvent(nsIView *
aView=0x034cfe80, nsIFrame * aTargetFrame=0x03773b2c, nsGUIEvent *
aEvent=0x0012f7ac, nsEventStatus * aEventStatus=0x0012f570)  Line 6111
+ 0x14 bytes    C++
       gklayout.dll!PresShell::HandleEvent(nsIView * aView=0x034cfe80,
nsGUIEvent * aEvent=0x0012f7ac, nsEventStatus *
aEventStatus=0x0012f570)  Line 5939 + 0x1b bytes        C++
       gklayout.dll!nsViewManager::HandleEvent(nsView * aView=0x034cfe80,
nsPoint aPoint={...}, nsGUIEvent * aEvent=0x0012f7ac, int aCaptured=0)
 Line 1665      C++
       gklayout.dll!nsViewManager::DispatchEvent(nsGUIEvent *
aEvent=0x0012f7ac, nsEventStatus * aStatus=0x0012f698)  Line 1618 +
0x22 bytes      C++
       gklayout.dll!HandleEvent(nsGUIEvent * aEvent=0x0012f7ac)  Line 174      C++
       gkwidget.dll!nsWindow::DispatchEvent(nsGUIEvent * event=0x0012f7ac,
nsEventStatus & aStatus=nsEventStatus_eIgnore)  Line 1102 + 0xc
bytes   C++
       gkwidget.dll!nsWindow::DispatchWindowEvent(nsGUIEvent *
event=0x0012f7ac)  Line 1123    C++
       gkwidget.dll!nsWindow::DispatchMouseEvent(unsigned int
aEventType=301, unsigned int wParam=0, long lParam=917539)  Line 5998
+ 0x1a bytes    C++
       gkwidget.dll!ChildWindow::DispatchMouseEvent(unsigned int
aEventType=301, unsigned int wParam=0, long lParam=917539)  Line
6181    C++
       gkwidget.dll!nsWindow::ProcessMessage(unsigned int msg=514, unsigned
int wParam=0, long lParam=917539, long * aRetValue=0x0012fc18)  Line
4513 + 0x20 bytes       C++
       gkwidget.dll!nsWindow::WindowProc(HWND__ * hWnd=0x0003037e, unsigned
int msg=514, unsigned int wParam=0, long lParam=917539)  Line 1291 +
0x1d bytes      C++
       user32.dll!77d48734()
       user32.dll!77d48816()
       user32.dll!77d489cd()
       user32.dll!77d49402()
       user32.dll!77d48a10()
       gkwidget.dll!nsAppShell::ProcessNextNativeEvent(int mayWait=1)  Line
145 + 0xa bytes C++
       gkwidget.dll!nsBaseAppShell::DoProcessNextNativeEvent(int mayWait=1)
 Line 136 + 0x11 bytes  C++
       gkwidget.dll!nsBaseAppShell::OnProcessNextEvent(nsIThreadInternal *
thr=0x00398e18, int mayWait=1, unsigned int recursionDepth=0)  Line
231 + 0xf bytes C++
       xpcom_core.dll!nsThread::ProcessNextEvent(int mayWait=1, int *
result=0x0012fe04)  Line 472    C++
       xpcom_core.dll!NS_ProcessNextEvent_P(nsIThread * thread=0x00398e18,
int mayWait=1)  Line 225 + 0x16 bytes   C++
       gkwidget.dll!nsBaseAppShell::Run()  Line 153 + 0xc bytes        C++
       appcomps.dll!nsAppStartup::Run()  Line 219      C++
       seamonkey.exe!main1(int argc=2, char * * argv=0x00394cf0,
nsISupports * nativeApp=0x00965aa0)  Line 1238 + 0x22 bytes     C++
       seamonkey.exe!main(int argc=2, char * * argv=0x00394cf0)  Line 1740
+ 0x25 bytes    C++
       seamonkey.exe!__tmainCRTStartup()  Line 586 + 0x19 bytes        C
       seamonkey.exe!mainCRTStartup()  Line 403        C
       kernel32.dll!7c816d4f()
       kernel32.dll!7c8399f3()
(Assignee)

Comment 1

13 years ago
Created attachment 226439 [details] [diff] [review]
init the baseURI separately
Attachment #226439 - Flags: superreview?
Attachment #226439 - Flags: review?(ajvincent)
(Assignee)

Updated

13 years ago
Attachment #226439 - Flags: superreview? → superreview?(peterv)
(Assignee)

Comment 2

13 years ago
Created attachment 226440 [details] [diff] [review]
init the baseURI separately
Attachment #226439 - Attachment is obsolete: true
Attachment #226440 - Flags: superreview?(peterv)
Attachment #226440 - Flags: review?(ajvincent)
Attachment #226439 - Flags: superreview?(peterv)
Attachment #226439 - Flags: review?(ajvincent)
(Assignee)

Updated

13 years ago
Attachment #226440 - Flags: approval1.8.1?
(Assignee)

Updated

13 years ago
Attachment #226440 - Flags: approval1.8.1?
Comment on attachment 226440 [details] [diff] [review]
init the baseURI separately

>Index: parser/xml/src/nsSAXXMLReader.cpp
>+  if(!EnsureBaseURI())

Space after the word "if", please, in both places.

I'm not really a reviewer for this code, but the patch is pretty darned simple.  I'll grant provisional r+, but I want peterv to take a closer (r/sr) look at this as well.

This does fix the assertion I discovered and sayrer filed the bug for.
Attachment #226440 - Flags: review?(ajvincent) → review+
Comment on attachment 226440 [details] [diff] [review]
init the baseURI separately

Add space after if. Make EnsureBaseURI return nsresult and use NS_ENSURE_SUCCESS in the callers instead of going back and forth between nsresult and PRBool.
Attachment #226440 - Flags: superreview?(peterv) → superreview+
(Assignee)

Comment 5

12 years ago
Created attachment 228680 [details] [diff] [review]
patch to check in
Attachment #226440 - Attachment is obsolete: true
(Assignee)

Comment 6

12 years ago
Checking in src/nsSAXXMLReader.h;
/cvsroot/mozilla/parser/xml/src/nsSAXXMLReader.h,v  <--  nsSAXXMLReader.h
new revision: 1.4; previous revision: 1.3
done
Checking in src/nsSAXXMLReader.cpp;
/cvsroot/mozilla/parser/xml/src/nsSAXXMLReader.cpp,v  <--  nsSAXXMLReader.cpp
new revision: 1.9; previous revision: 1.8
done
Status: NEW → RESOLVED
Last Resolved: 12 years ago
Resolution: --- → FIXED
(Assignee)

Updated

12 years ago
Attachment #228680 - Flags: approval1.8.1?
(Assignee)

Updated

12 years ago
Flags: blocking1.8.1?
Target Milestone: --- → mozilla1.8.1beta2
Flags: blocking1.8.1? → blocking1.8.1+

Updated

12 years ago
Attachment #228680 - Flags: approval1.8.1? → approval1.8.1+
(Assignee)

Comment 7

12 years ago
Checking in src/nsSAXXMLReader.cpp;
/cvsroot/mozilla/parser/xml/src/nsSAXXMLReader.cpp,v  <--  nsSAXXMLReader.cpp
new revision: 1.6.2.6; previous revision: 1.6.2.5
done
Checking in src/nsSAXXMLReader.h;
/cvsroot/mozilla/parser/xml/src/nsSAXXMLReader.h,v  <--  nsSAXXMLReader.h
new revision: 1.2.2.5; previous revision: 1.2.2.4
done
Keywords: fixed1.8.1
You need to log in before you can comment on or make changes to this bug.