OracleEXDI: bind input buffer bug

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

OracleEXDI: bind input buffer bug

Holger Kleinsorgen-4
The following snippet will raise the error "Improper store into
indexable object". Binding to a 32 bit number and afterwards to a number
larger than 32 bits seems to cause the problem (when 0 is replaced by
16r100000000, it works fine).

Tested with VW 7.4.1 / vw 7.5 mar3, Oracle 10g Express Client / Oracle
9i Client, and Oracle 9i Server, Windows 2000.


| con session |
con := OracleConnection new.
con
        environment: '//hostname/Db';
        username: 'scott';
        connect: 'tiger'.
session := con getSession.
session connect.
[
        session prepare: 'CREATE TABLE bufferbug1 (Col1 NUMBER(20))'.
        session execute.
        session prepare: 'INSERT INTO bufferbug1 values (?)'.
        " a 32 bit integer "
        session bindInput: (Array with: 0).
        session execute.
        " not a 32 bit integer "
        session bindInput: (Array with: 16r100000000).
        session execute.
] ensure: [
        session disconnect
].


Unhandled exception: Improper store into indexable object
UninterpretedBytes(Object)>>error:
UninterpretedBytes(Object)>>improperStoreError
UninterpretedBytes(Object)>>basicAt:put:
UninterpretedBytes>>byteAt:put:
UninterpretedBytes>>longAt:put:bigEndian:
UninterpretedBytes>>longAt:put:
CIntegerType(CScalarType)>>put:into:at:
CIntegerType(CType)>>contentsAt:offset:put:
CPointer>>primContentsAt:index:pointerKind:datumKind:put:
CPointer>>at:put:
OracleBuffer>>at:putSignedInteger:
OracleBuffer>>at:put:
OracleBuffer>>value:
optimized [] in OracleSession>>bindValue:at:
BlockClosure>>on:do:
OracleSession>>bindValue:at:
OracleSession>>bindExternal
optimized [] in ExternalDatabaseSession>>execute
BlockClosure>>ifCurtailed:
OracleSession(ExternalDatabaseSession)>>execute
optimized [] in UndefinedObject>>unboundMethod
BlockClosure>>ensure:
UndefinedObject>>unboundMethod
UndefinedObject(Object)>>performMethod:arguments:
UndefinedObject(Object)>>performMethod:
TextEditorController(ParagraphEditor)>>evaluateCompiled:
optimized [] in ParagraphEditor>>evaluateSelection
BlockClosure>>ensure:
Cursor>>showWhile:
TextEditorController(ParagraphEditor)>>evaluateSelection
optimized [] in ParagraphEditor>>doIt
BlockClosure>>on:do:
TextEditorController(ParagraphEditor)>>doIt
WorkspacePage>>doIt
Workbook(AbstractWorkspace)>>smalltalkDoIt
Win98MenuBarButtonController(MenuBarButtonController)>>dispatchMenuSymbol:
Win98MenuBarButtonController(MenuBarButtonController)>>dispatchMenuSelection:
optimized [] in [] in MenuBarButtonView>>processShortcutKeyEventAsMenuItemAccessor:
BlockClosure>>ensure:
optimized [] in MenuBarButtonView>>processShortcutKeyEventAsMenuItemAccessor:
BlockClosure>>on:do:
Win98MenuBarButtonView(MenuBarButtonView)>>processShortcutKeyEventAsMenuItemAccessor:
[] in Win98MenuBar(MenuBar)>>processShortcutKeyEventInMenuBar:
OrderedCollection>>do:
Win98MenuBar(MenuBar)>>processShortcutKeyEventInMenuBar:
KeyboardProcessor>>processShortcutKeyEvent:
KeyboardProcessor>>processKeyboardEvent:
KeyboardProcessor>>processKeyboardEvent:for:
EventDispatcher>>dispatchEvent:
KeyPressedEvent(Event)>>dispatch
KeyPressedEvent(Event)>>dispatchForWindowManager:
optimized [] in WindowManager>>safelyDispatchForWindowManager:
BlockClosure>>on:do:
WindowManager>>safelyDispatchForWindowManager:
WindowManager>>processNextEvent
optimized [] in [] in WindowManager>>newProcess
BlockClosure>>on:do:
optimized [] in WindowManager>>newProcess
BlockClosure>>on:do:
optimized [] in Process class>>forBlock:priority:

----------------------------------------------------------------------
UninterpretedBytes(Object)>>error:
Receiver:
        an UninterpretedBytes
Arguments:
        aStringOrMessage = an UserMessage('Improper store into indexable object', #errImproperIndex, #dialogs)
Temporaries:
        lastNonSpace = 36
        aString = 'Improper store into indexable object'
Context PC = 18

----------------------------------------------------------------------
UninterpretedBytes(Object)>>improperStoreError
Receiver:
        an UninterpretedBytes
Context PC = 10

----------------------------------------------------------------------
UninterpretedBytes(Object)>>basicAt:put:
Receiver:
        an UninterpretedBytes
Arguments:
        index = 4
        value = -256
Context PC = 31

----------------------------------------------------------------------
UninterpretedBytes>>byteAt:put:
Receiver:
        an UninterpretedBytes
Arguments:
        index = 4
        aByte = -256
Context PC = 6

----------------------------------------------------------------------
UninterpretedBytes>>longAt:put:bigEndian:
Receiver:
        an UninterpretedBytes
Arguments:
        byteIndex = 1
        aLong = 4294967296
        isBE = false
Temporaries:
        b0 = -256
        b1 = 0
        b2 = 0
        b3 = 0
Context PC = 89

----------------------------------------------------------------------
UninterpretedBytes>>longAt:put:
Receiver:
        an UninterpretedBytes
Arguments:
        byteIndex = 1
        aLong = 4294967296
Context PC = 14

----------------------------------------------------------------------
CIntegerType(CScalarType)>>put:into:at:
Receiver:
        a CIntegerType
Instance Variables:
        specifierFlags = 1
        kind = 6
        numBits = 32
        printName = 'long'
        storeSelector = #signedLong
        atSelector = #longAt:
        atPutSelector = #longAt:put:
Arguments:
        newData = 4294967296
        data = an UninterpretedBytes
        offset = 1
Context PC = 10

----------------------------------------------------------------------
CIntegerType(CType)>>contentsAt:offset:put:
Receiver:
        a CIntegerType
Instance Variables:
        specifierFlags = 1
        kind = 6
        numBits = 32
        printName = 'long'
        storeSelector = #signedLong
        atSelector = #longAt:
        atPutSelector = #longAt:put:
Arguments:
        ptr = a CPointer {015DA300} (long * )
        offset = 0
        data = 4294967296
Temporaries:
        buffer = an UninterpretedBytes
        size = 4
Context PC = 15

----------------------------------------------------------------------
CPointer>>primContentsAt:index:pointerKind:datumKind:put:
Receiver:
        a CPointer
Instance Variables:
        theDatum = 22913792
        type = long *
Arguments:
        startAddress = 22913792
        index = 0
        pointerKind = 13
        datumKind = 6
        data = 4294967296
Context PC = 21

----------------------------------------------------------------------
CPointer>>at:put:
Receiver:
        a CPointer
Instance Variables:
        theDatum = 22913792
        type = long *
Arguments:
        index = 0
        data = 4294967296
Temporaries:
        referentType = long
Context PC = 14

----------------------------------------------------------------------
OracleBuffer>>at:putSignedInteger:
Receiver:
        an OracleBuffer
Instance Variables:
        databaseType = 3
        encoding = #'windows-1252'
        elementSize = 4
        count = 0
        bufferPointer = a CPointer {015DA300} (long * )
        indicatorsPointer = a CPointer {002FFE88} (short * )
        lengthsPointer = a CPointer {002FFE8A} (unsigned short * )
        rcodesPointer = a CPointer {002FFE8C} (unsigned short * )
        cursizPointer = nil
        getSelector = #getSignedIntegerAt:
        setSelector = #at:putSignedInteger:
        nullsPossible = true
        tempArray = nil
        session = an OracleSession( hstmt = 9545A54 )
Arguments:
        index = 1
        aValue = 4294967296
Temporaries:
        indexMinus1 = 0
Context PC = 29

----------------------------------------------------------------------
OracleBuffer>>at:put:
Receiver:
        an OracleBuffer
Instance Variables:
        databaseType = 3
        encoding = #'windows-1252'
        elementSize = 4
        count = 0
        bufferPointer = a CPointer {015DA300} (long * )
        indicatorsPointer = a CPointer {002FFE88} (short * )
        lengthsPointer = a CPointer {002FFE8A} (unsigned short * )
        rcodesPointer = a CPointer {002FFE8C} (unsigned short * )
        cursizPointer = nil
        getSelector = #getSignedIntegerAt:
        setSelector = #at:putSignedInteger:
        nullsPossible = true
        tempArray = nil
        session = an OracleSession( hstmt = 9545A54 )
Arguments:
        anIndex = 1
        aValue = 4294967296
Context PC = 9

----------------------------------------------------------------------
OracleBuffer>>value:
Receiver:
        an OracleBuffer
Instance Variables:
        databaseType = 3
        encoding = #'windows-1252'
        elementSize = 4
        count = 0
        bufferPointer = a CPointer {015DA300} (long * )
        indicatorsPointer = a CPointer {002FFE88} (short * )
        lengthsPointer = a CPointer {002FFE8A} (unsigned short * )
        rcodesPointer = a CPointer {002FFE8C} (unsigned short * )
        cursizPointer = nil
        getSelector = #getSignedIntegerAt:
        setSelector = #at:putSignedInteger:
        nullsPossible = true
        tempArray = nil
        session = an OracleSession( hstmt = 9545A54 )
Arguments:
        aValueOrArray = 4294967296
Temporaries:
        isArray = false
        size = nil
        index = nil
        index = nil
Context PC = 24

----------------------------------------------------------------------
optimized [] in OracleSession>>bindValue:at:
Receiver:
        an UndefinedObject
Temporaries:
        buffer = an OracleBuffer
        .aValue = 4294967296
Context PC = 7

----------------------------------------------------------------------
BlockClosure>>on:do:
Receiver:
        a BlockClosure
Instance Variables:
        method = CompiledBlock [] in OracleSession>>bindValue:at:
        outerContext = nil
        copiedValues = an Array[2]
Arguments:
        anExceptionSelector = UnableToBind
        handlerBlock = BlockClosure [] in OracleSession>>bindValue:at:
Context PC = 18

----------------------------------------------------------------------
OracleSession>>bindValue:at:
Receiver:
        an OracleSession
Instance Variables:
        stateHolder = a ValueHolder on: #prepared
        traceStream = nil
        traceLevel = 0
        participants = a WeakArray[0]
        participantsSemaphore = a RecursionLock
        connection = an OracleConnection( hsvcctx = 953C580 )
        query = 'INSERT INTO bufferbug1 values (?)'
        queryFragments = an OrderedCollection[3]
        bindInput = an Array[1]
        bindTemplate = nil
        bindOutput = nil
        useNamedOutputBinding = false
        bindValues = an IdentityDictionary[0]
        resultTemplate = nil
        allocateForEachRow = true
        blockFactor = 1
        numColumns = nil
        columnDescriptions = nil
        rowAdaptors = nil
        rowBuffersHolder = a ValueHolder on: nil
        bufferIndex = nil
        answerStream = nil
        currentRow = nil
        resultsCache = nil
        hstmtHolder = a ValueHolder on: a CCompositePointer {09545A54} (struct __OCIStmt * )
        herrHolder = a ValueHolder on: a CCompositePointer {0953C634} (struct __OCIError * )
        bindValuePointersHolder = a ValueHolder on: IdentityDictionary (1->an OracleBuffer )
        maxLongBytes = 32768
        queryIsPLSQL = false
        currentRowIndex = nil
        totalRows = nil
        rowsInBlock = nil
        dependentLobs = a WeakDictionary[0]
        sqlPointerHolder = a ValueHolder on: a CPointer {015DA228} (unsigned char * )
        maxBindSize = 1
        needBinding = true
Arguments:
        aValue = 4294967296
        position = 1
Temporaries:
        buffer = an OracleBuffer
        bindSize = 1
Context PC = 90

----------------------------------------------------------------------
OracleSession>>bindExternal
Receiver:
        an OracleSession
Instance Variables:
        stateHolder = a ValueHolder on: #prepared
        traceStream = nil
        traceLevel = 0
        participants = a WeakArray[0]
        participantsSemaphore = a RecursionLock
        connection = an OracleConnection( hsvcctx = 953C580 )
        query = 'INSERT INTO bufferbug1 values (?)'
        queryFragments = an OrderedCollection[3]
        bindInput = an Array[1]
        bindTemplate = nil
        bindOutput = nil
        useNamedOutputBinding = false
        bindValues = an IdentityDictionary[0]
        resultTemplate = nil
        allocateForEachRow = true
        blockFactor = 1
        numColumns = nil
        columnDescriptions = nil
        rowAdaptors = nil
        rowBuffersHolder = a ValueHolder on: nil
        bufferIndex = nil
        answerStream = nil
        currentRow = nil
        resultsCache = nil
        hstmtHolder = a ValueHolder on: a CCompositePointer {09545A54} (struct __OCIStmt * )
        herrHolder = a ValueHolder on: a CCompositePointer {0953C634} (struct __OCIError * )
        bindValuePointersHolder = a ValueHolder on: IdentityDictionary (1->an OracleBuffer )
        maxLongBytes = 32768
        queryIsPLSQL = false
        currentRowIndex = nil
        totalRows = nil
        rowsInBlock = nil
        dependentLobs = a WeakDictionary[0]
        sqlPointerHolder = a ValueHolder on: a CPointer {015DA228} (unsigned char * )
        maxBindSize = 1
        needBinding = true
Temporaries:
        index = 2
        bindMarker = 1
        value = 4294967296
        bindPosition = 1
Context PC = 59

----------------------------------------------------------------------
optimized [] in ExternalDatabaseSession>>execute
Receiver:
        an UndefinedObject
Temporaries:
        .self = an OracleSession( hstmt = 9545A54 )
Context PC = 6

----------------------------------------------------------------------
BlockClosure>>ifCurtailed:
Receiver:
        a BlockClosure
Instance Variables:
        method = CompiledBlock [] in ExternalDatabaseSession>>execute
        outerContext = nil
        copiedValues = an OracleSession( hstmt = 9545A54 )
Arguments:
        terminationBlock = BlockClosure [] in ExternalDatabaseSession>>execute
Context PC = 4

----------------------------------------------------------------------
OracleSession(ExternalDatabaseSession)>>execute
Receiver:
        an OracleSession
Instance Variables:
        stateHolder = a ValueHolder on: #prepared
        traceStream = nil
        traceLevel = 0
        participants = a WeakArray[0]
        participantsSemaphore = a RecursionLock
        connection = an OracleConnection( hsvcctx = 953C580 )
        query = 'INSERT INTO bufferbug1 values (?)'
        queryFragments = an OrderedCollection[3]
        bindInput = an Array[1]
        bindTemplate = nil
        bindOutput = nil
        useNamedOutputBinding = false
        bindValues = an IdentityDictionary[0]
        resultTemplate = nil
        allocateForEachRow = true
        blockFactor = 1
        numColumns = nil
        columnDescriptions = nil
        rowAdaptors = nil
        rowBuffersHolder = a ValueHolder on: nil
        bufferIndex = nil
        answerStream = nil
        currentRow = nil
        resultsCache = nil
        hstmtHolder = a ValueHolder on: a CCompositePointer {09545A54} (struct __OCIStmt * )
        herrHolder = a ValueHolder on: a CCompositePointer {0953C634} (struct __OCIError * )
        bindValuePointersHolder = a ValueHolder on: IdentityDictionary (1->an OracleBuffer )
        maxLongBytes = 32768
        queryIsPLSQL = false
        currentRowIndex = nil
        totalRows = nil
        rowsInBlock = nil
        dependentLobs = a WeakDictionary[0]
        sqlPointerHolder = a ValueHolder on: a CPointer {015DA228} (unsigned char * )
        maxBindSize = 1
        needBinding = true
Context PC = 34

----------------------------------------------------------------------
optimized [] in UndefinedObject>>unboundMethod
Receiver:
        an UndefinedObject
Temporaries:
        .session = an OracleSession( hstmt = 9545A54 )
Context PC = 33

----------------------------------------------------------------------
BlockClosure>>ensure:
Receiver:
        a BlockClosure
Instance Variables:
        method = CompiledBlock [] in UndefinedObject>>unboundMethod
        outerContext = nil
        copiedValues = an OracleSession( hstmt = 9545A54 )
Arguments:
        aBlock = BlockClosure [] in UndefinedObject>>unboundMethod
Temporaries:
        result = nil
Context PC = 4

----------------------------------------------------------------------
UndefinedObject>>unboundMethod
Receiver:
        an UndefinedObject
Temporaries:
        con = an OracleConnection( hsvcctx = 953C580 )
        session = an OracleSession( hstmt = 9545A54 )
Context PC = 29

----------------------------------------------------------------------
UndefinedObject(Object)>>performMethod:arguments:
Receiver:
        an UndefinedObject
Arguments:
        method = AnnotatedMethod UndefinedObject>>unboundMethod
        args = an Array[0]
Context PC = 5

----------------------------------------------------------------------
UndefinedObject(Object)>>performMethod:
Receiver:
        an UndefinedObject
Arguments:
        method = AnnotatedMethod UndefinedObject>>unboundMethod
Context PC = 5

----------------------------------------------------------------------
TextEditorController(ParagraphEditor)>>evaluateCompiled:
Receiver:
        a TextEditorController
Instance Variables:
        model = a PluggableAdaptor
        view = a TextEditorView
        sensor = a TranslatingSensor
        menuHolder = a ValueHolder on: a Menu
        performer = a WorkspacePage
        beginTypeInIndex = nil
        anchorIndex = 563
        emphasisHere = nil
        dispatchTable = a DispatchTable
        charComposer = a CharacterComposer
        textHasChanged = true
        feelPolicy = a HolgisCodingFeelPolicy
        supportCodeEditingFeels = true
        localMenuItems = an Array[20]
        extendingDown = true
        keyboardProcessor = a KeyboardProcessor
        keyboardHook = nil
        readOnly = false
        accepted = false
        autoAccept = false
        continuousAccept = false
        tabMeansNextField = true
        tabRequiresControl = true
        dispatcher = an UIDispatcher
Arguments:
        aMethod = AnnotatedMethod UndefinedObject>>unboundMethod
Temporaries:
        context = nil
Context PC = 13

----------------------------------------------------------------------
optimized [] in ParagraphEditor>>evaluateSelection
Receiver:
        an UndefinedObject
Temporaries:
        .self = a TextEditorController
        .code = AnnotatedMethod UndefinedObject>>unboundMethod
Context PC = 7

----------------------------------------------------------------------
BlockClosure>>ensure:
Receiver:
        a BlockClosure
Instance Variables:
        method = CompiledBlock [] in ParagraphEditor>>evaluateSelection
        outerContext = nil
        copiedValues = an Array[2]
Arguments:
        aBlock = BlockClosure [] in Cursor>>showWhile:
Temporaries:
        result = nil
Context PC = 4

----------------------------------------------------------------------
Cursor>>showWhile:
Receiver:
        a Cursor
Instance Variables:
        errorCode = 0
        handle = 3
        image = Depth1Image(extent: 16@16 depth: 1)
        mask = Depth1Image(extent: 16@16 depth: 1)
        hotSpot = 1@1
        name = 'xeq'
Arguments:
        aBlock = BlockClosure [] in ParagraphEditor>>evaluateSelection
Temporaries:
        oldcursor = Cursor normal
Context PC = 23

----------------------------------------------------------------------
TextEditorController(ParagraphEditor)>>evaluateSelection
Receiver:
        a TextEditorController
Instance Variables:
        model = a PluggableAdaptor
        view = a TextEditorView
        sensor = a TranslatingSensor
        menuHolder = a ValueHolder on: a Menu
        performer = a WorkspacePage
        beginTypeInIndex = nil
        anchorIndex = 563
        emphasisHere = nil
        dispatchTable = a DispatchTable
        charComposer = a CharacterComposer
        textHasChanged = true
        feelPolicy = a HolgisCodingFeelPolicy
        supportCodeEditingFeels = true
        localMenuItems = an Array[20]
        extendingDown = true
        keyboardProcessor = a KeyboardProcessor
        keyboardHook = nil
        readOnly = false
        accepted = false
        autoAccept = false
        continuousAccept = false
        tabMeansNextField = true
        tabRequiresControl = true
        dispatcher = an UIDispatcher
Temporaries:
        code = AnnotatedMethod UndefinedObject>>unboundMethod
        result = nil
Context PC = 14

----------------------------------------------------------------------
optimized [] in ParagraphEditor>>doIt
Receiver:
        an UndefinedObject
Temporaries:
        .self = a TextEditorController
Context PC = 6

----------------------------------------------------------------------
BlockClosure>>on:do:
Receiver:
        a BlockClosure
Instance Variables:
        method = CompiledBlock [] in ParagraphEditor>>doIt
        outerContext = nil
        copiedValues = a TextEditorController
Arguments:
        anExceptionSelector = CompilationError
        handlerBlock = BlockClosure [] in ParagraphEditor>>doIt
Context PC = 18

----------------------------------------------------------------------
TextEditorController(ParagraphEditor)>>doIt
Receiver:
        a TextEditorController
Instance Variables:
        model = a PluggableAdaptor
        view = a TextEditorView
        sensor = a TranslatingSensor
        menuHolder = a ValueHolder on: a Menu
        performer = a WorkspacePage
        beginTypeInIndex = nil
        anchorIndex = 563
        emphasisHere = nil
        dispatchTable = a DispatchTable
        charComposer = a CharacterComposer
        textHasChanged = true
        feelPolicy = a HolgisCodingFeelPolicy
        supportCodeEditingFeels = true
        localMenuItems = an Array[20]
        extendingDown = true
        keyboardProcessor = a KeyboardProcessor
        keyboardHook = nil
        readOnly = false
        accepted = false
        autoAccept = false
        continuousAccept = false
        tabMeansNextField = true
        tabRequiresControl = true
        dispatcher = an UIDispatcher
Context PC = 20

----------------------------------------------------------------------
WorkspacePage>>doIt
Receiver:
        a WorkspacePage
Instance Variables:
        dependents = a PluggableAdaptor
        builder = an UIBuilder
        uiSession = nil
        eventHandlers = an IdentityDictionary[1]
        workspace = a Workbook
        label = 'oracle1.ws'
        verboseLabel = nil
        fileTimestamp = Donnerstag, 22. Dezember 2005 13:22:12.000
        textModel = a PluggableAdaptor
        unacceptedText = nil
        savedSelection = an Array[2]
        savedFileTimestamp = Donnerstag, 22. Dezember 2005 13:22:12.000
        textModelOverride = nil
Context PC = 16

----------------------------------------------------------------------
Workbook(AbstractWorkspace)>>smalltalkDoIt
Receiver:
        a Workbook
Instance Variables:
        dependents = an ApplicationWindow 27 ('Workspace')
        builder = an UIBuilder
        uiSession = a ControlManager
        eventHandlers = nil
        locals = a WorkspaceVariablePool[0]
        importAll = true
        specificImports = an Array[3]
        importSummaryHolder = a ValueHolder on: 'All'
        statusBarVisible = true
        encodingChannel = a ValueHolder on: #Source
        menuBarHolder = a ValueHolder on: a Menu
        pageHolder = a SelectionInList
        lastInstalledPage = a WorkspacePage
Context PC = 5

----------------------------------------------------------------------
Win98MenuBarButtonController(MenuBarButtonController)>>dispatchMenuSymbol:
Receiver:
        a Win98MenuBarButtonController
Instance Variables:
        model = nil
        view = a Win98MenuBarButtonView
        sensor = a TranslatingSensor
        highlightOnOpen = false
Arguments:
        menuSelection = #smalltalkDoIt
Context PC = 38

----------------------------------------------------------------------
Win98MenuBarButtonController(MenuBarButtonController)>>dispatchMenuSelection:
Receiver:
        a Win98MenuBarButtonController
Instance Variables:
        model = nil
        view = a Win98MenuBarButtonView
        sensor = a TranslatingSensor
        highlightOnOpen = false
Arguments:
        menuSelection = #smalltalkDoIt
Context PC = 21

----------------------------------------------------------------------
optimized [] in [] in MenuBarButtonView>>processShortcutKeyEventAsMenuItemAccessor:
Receiver:
        an UndefinedObject
Temporaries:
        .self = a Win98MenuBarButtonView
        .theValue = #smalltalkDoIt
Context PC = 12

----------------------------------------------------------------------
BlockClosure>>ensure:
Receiver:
        a BlockClosure
Instance Variables:
        method = CompiledBlock [] in [] in MenuBarButtonView>>processShortcutKeyEventAsMenuItemAccessor:
        outerContext = nil
        copiedValues = an Array[2]
Arguments:
        aBlock = BlockClosure [] in [] in MenuBarButtonView>>processShortcutKeyEventAsMenuItemAccessor:
Temporaries:
        result = nil
Context PC = 4

----------------------------------------------------------------------
optimized [] in MenuBarButtonView>>processShortcutKeyEventAsMenuItemAccessor:
Receiver:
        an UndefinedObject
Temporaries:
        .self = a Win98MenuBarButtonView
        .theValue = #smalltalkDoIt
Context PC = 14

----------------------------------------------------------------------
BlockClosure>>on:do:
Receiver:
        a BlockClosure
Instance Variables:
        method = CompiledBlock [] in MenuBarButtonView>>processShortcutKeyEventAsMenuItemAccessor:
        outerContext = nil
        copiedValues = an Array[2]
Arguments:
        anExceptionSelector = VetoAction
        handlerBlock = BlockClosure [] in MenuBarButtonView>>processShortcutKeyEventAsMenuItemAccessor:
Context PC = 18

----------------------------------------------------------------------
Win98MenuBarButtonView(MenuBarButtonView)>>processShortcutKeyEventAsMenuItemAccessor:
Receiver:
        a Win98MenuBarButtonView
Instance Variables:
        container = a BoundedWrapper on: a Win98MenuBarButtonView
        eventHandlers = nil
        model = nil
        controller = a Win98MenuBarButtonController
        properties = nil
        state = a WidgetState
        isInTransition = true
        latestValue = nil
        referenceValue = true
        label = Label for 'Smalltalk'
        textStyle = a VariableSizeTextAttributes
        helpText = nil
        menuHolder = a Menu
        menuBar = a Win98MenuBar
        accessChar = 1
Arguments:
        aKeyboardEvent = a KeyPressedEvent
Temporaries:
        theMenu = a Menu
        matchingMenuItem = a MenuItem 'Do it'
        theValue = #smalltalkDoIt
        selector = nil
Context PC = 55

----------------------------------------------------------------------
[] in Win98MenuBar(MenuBar)>>processShortcutKeyEventInMenuBar:
Receiver:
        a Win98MenuBar
Instance Variables:
        container = a MenuBarWrapper on: a Win98MenuBar
        eventHandlers = nil
        components = an OrderedCollection[5]
        preferredBounds = 4@4 corner: 207@27
        leftSpace = 4
        spaceBetweenItems = 0
        extraSpaceTop = 4
        extraSpaceBottom = 3
        extraSpaceBetweenLines = 0
        menuChannel = a ValueHolder on: a Menu
        performer = a Workbook
        menuButtons = an OrderedCollection[5]
        nextMenuButton = nil
        lastMousePosition = 970@39
Arguments:
        each = a Win98MenuBarButtonView
Temporaries:
        .aKeyboardEvent = a KeyPressedEvent
Context PC = 10

----------------------------------------------------------------------
OrderedCollection>>do:
Receiver:
        an OrderedCollection
Instance Variables:
        firstIndex = 1
        lastIndex = 5
Arguments:
        aBlock = BlockClosure [] in MenuBar>>processShortcutKeyEventInMenuBar:
Temporaries:
        index = 3
Context PC = 17

----------------------------------------------------------------------
Win98MenuBar(MenuBar)>>processShortcutKeyEventInMenuBar:
Receiver:
        a Win98MenuBar
Instance Variables:
        container = a MenuBarWrapper on: a Win98MenuBar
        eventHandlers = nil
        components = an OrderedCollection[5]
        preferredBounds = 4@4 corner: 207@27
        leftSpace = 4
        spaceBetweenItems = 0
        extraSpaceTop = 4
        extraSpaceBottom = 3
        extraSpaceBetweenLines = 0
        menuChannel = a ValueHolder on: a Menu
        performer = a Workbook
        menuButtons = an OrderedCollection[5]
        nextMenuButton = nil
        lastMousePosition = 970@39
Arguments:
        aKeyboardEvent = a KeyPressedEvent
Context PC = 20

----------------------------------------------------------------------
KeyboardProcessor>>processShortcutKeyEvent:
Receiver:
        a KeyboardProcessor
Instance Variables:
        keyboardConsumers = an OrderedCollection[2]
        currentConsumer = a TextEditorController
        default = nil
        cancel = nil
        keyboardHook = nil
        focusIsShifting = false
        currentConsumerChannel = nil
        acceptOnControlChange = false
        menuBar = a Win98MenuBar
Arguments:
        aKeyEvent = a KeyPressedEvent
Temporaries:
        theCurrentConsumer = a TextEditorController
        index = nil
        controller = nil
Context PC = 28

----------------------------------------------------------------------
KeyboardProcessor>>processKeyboardEvent:
Receiver:
        a KeyboardProcessor
Instance Variables:
        keyboardConsumers = an OrderedCollection[2]
        currentConsumer = a TextEditorController
        default = nil
        cancel = nil
        keyboardHook = nil
        focusIsShifting = false
        currentConsumerChannel = nil
        acceptOnControlChange = false
        menuBar = a Win98MenuBar
Arguments:
        aKeyboardEvent = a KeyPressedEvent
Temporaries:
        theCurrentConsumer = nil
Context PC = 8

----------------------------------------------------------------------
KeyboardProcessor>>processKeyboardEvent:for:
Receiver:
        a KeyboardProcessor
Instance Variables:
        keyboardConsumers = an OrderedCollection[2]
        currentConsumer = a TextEditorController
        default = nil
        cancel = nil
        keyboardHook = nil
        focusIsShifting = false
        currentConsumerChannel = nil
        acceptOnControlChange = false
        menuBar = a Win98MenuBar
Arguments:
        keyboardEvent = a KeyPressedEvent
        aController = an ApplicationStandardSystemController [a Workbook]
Temporaries:
        ev = a KeyPressedEvent
Context PC = 26

----------------------------------------------------------------------
EventDispatcher>>dispatchEvent:
Receiver:
        an EventDispatcher
Instance Variables:
        windowController = an ApplicationStandardSystemController [a Workbook]
        currentMouseConsumer = nil
        grabbingMouse = false
        keyboardProcessor = a KeyboardProcessor
        lastControlObject = a TextEditorController
        trapList = nil
        state = nil
        repairDamageWhenDebugging = true
        flushQueueAfterError = true
        distributeEventsWhenDebugging = true
        dragDropInProgress = false
        dragDropTracker = nil
        dispatchUnknownEvents = false
Arguments:
        event = a KeyPressedEvent
Temporaries:
        objectWantingControl = nil
        targetKeyboardProcessor = a KeyboardProcessor
Context PC = 82

----------------------------------------------------------------------
KeyPressedEvent(Event)>>dispatch
Receiver:
        a KeyPressedEvent
Instance Variables:
        time = nil
        initiator = an EventDispatcher
        window = an ApplicationWindow 27 ('Workspace')
        state = nil
        keyCharacter = $ "16r0004"
        metaState = 2
        alternativeKeyCharacter = nil
Context PC = 16

----------------------------------------------------------------------
KeyPressedEvent(Event)>>dispatchForWindowManager:
Receiver:
        a KeyPressedEvent
Instance Variables:
        time = nil
        initiator = an EventDispatcher
        window = an ApplicationWindow 27 ('Workspace')
        state = nil
        keyCharacter = $ "16r0004"
        metaState = 2
        alternativeKeyCharacter = nil
Arguments:
        aWinMgr = a WindowManager
Context PC = 4

----------------------------------------------------------------------
optimized [] in WindowManager>>safelyDispatchForWindowManager:
Receiver:
        an UndefinedObject
Temporaries:
        .event = a KeyPressedEvent
        .self = a WindowManager
Context PC = 6

----------------------------------------------------------------------
BlockClosure>>on:do:
Receiver:
        a BlockClosure
Instance Variables:
        method = CompiledBlock [] in WindowManager>>safelyDispatchForWindowManager:
        outerContext = nil
        copiedValues = an Array[2]
Arguments:
        anExceptionSelector = an ExceptionSet[2]
        handlerBlock = BlockClosure [] in WindowManager>>safelyDispatchForWindowManager:
Context PC = 18

----------------------------------------------------------------------
WindowManager>>safelyDispatchForWindowManager:
Receiver:
        a WindowManager
Instance Variables:
        windows = an OrderedCollection[1]
        activeController = nil
        interruptLock = false
        outstandingMetaOrDamage = false
        openInProgress = false
        eventQueue = an EventQueue
        baseProcess = a Process in Semaphore>>wait
        dontFilterEvents = false
Arguments:
        event = a KeyPressedEvent
Context PC = 15

----------------------------------------------------------------------
WindowManager>>processNextEvent
Receiver:
        a WindowManager
Instance Variables:
        windows = an OrderedCollection[1]
        activeController = nil
        interruptLock = false
        outstandingMetaOrDamage = false
        openInProgress = false
        eventQueue = an EventQueue
        baseProcess = a Process in Semaphore>>wait
        dontFilterEvents = false
Temporaries:
        event = a KeyPressedEvent
Context PC = 9

----------------------------------------------------------------------
optimized [] in [] in WindowManager>>newProcess
Receiver:
        an UndefinedObject
Temporaries:
        .self = a WindowManager
Context PC = 13

----------------------------------------------------------------------
BlockClosure>>on:do:
Receiver:
        a BlockClosure
Instance Variables:
        method = CompiledBlock [] in [] in WindowManager>>newProcess
        outerContext = nil
        copiedValues = a WindowManager
Arguments:
        anExceptionSelector = TerminateException
        handlerBlock = BlockClosure [] in [] in WindowManager>>newProcess
Context PC = 18

----------------------------------------------------------------------
optimized [] in WindowManager>>newProcess
Receiver:
        an UndefinedObject
Temporaries:
        .self = a WindowManager
Context PC = 15

----------------------------------------------------------------------
BlockClosure>>on:do:
Receiver:
        a BlockClosure
Instance Variables:
        method = CompiledBlock [] in WindowManager>>newProcess
        outerContext = nil
        copiedValues = a WindowManager
Arguments:
        anExceptionSelector = TerminateException
        handlerBlock = BlockClosure [] in [] in Process class>>forBlock:priority:
Context PC = 18

----------------------------------------------------------------------
optimized [] in Process class>>forBlock:priority:
Receiver:
        an UndefinedObject
Temporaries:
        .aBlock = BlockClosure [] in WindowManager>>newProcess
Context PC = 9
Reply | Threaded
Open this post in threaded view
|

RE: OracleEXDI: bind input buffer bug

Joachim Geidel
Hi Holger,

I think I've seen this one before. Your analysis is right - if a buffer is allocated for SmallIntegers, and later reused with a LargeInteger, there is no check if the new data fit into the buffer. If I am not mistaken, it is a known bug registered as AR#50456.

>The following snippet will raise the error "Improper store into
>indexable object". Binding to a 32 bit number and afterwards to a number
>larger than 32 bits seems to cause the problem (when 0 is replaced by
>16r100000000, it works fine).

Joachim Geidel

Reply | Threaded
Open this post in threaded view
|

RE: OracleEXDI: bind input buffer bug

Alan Knight-2
50456 was fixed in 7.4.1, so I think this is either a regression or a case that was missed.

At 01:29 PM 3/28/2007, [hidden email] wrote:
Hi Holger,

I think I've seen this one before. Your analysis is right - if a buffer is allocated for SmallIntegers, and later reused with a LargeInteger, there is no check if the new data fit into the buffer. If I am not mistaken, it is a known bug registered as AR#50456.

>The following snippet will raise the error "Improper store into
>indexable object". Binding to a 32 bit number and afterwards to a number
>larger than 32 bits seems to cause the problem (when 0 is replaced by
>16r100000000, it works fine).

Joachim Geidel

--
Alan Knight [|], Cincom Smalltalk Development

"The Static Typing Philosophy: Make it fast. Make it right. Make it run." - Niall Ross