NOTE: Jira is for bug reports and feature requests.
If you are entering an issue to ask a question,
please use the QuickFIX/J support options. Thank you.

Issue Details (XML | Word | Printable)

Key: QFJ-401
Type: Bug Bug
Status: Open Open
Priority: Default Default
Assignee: Unassigned
Reporter: Jay Walters
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
QuickFIX/J

Badly behaved counterparty sending FIX.5.0 as begin string causes exceptions

Created: 03/Feb/09 10:28 PM   Updated: 07/Apr/10 01:29 AM
Return to search
Issue 47 of 71 issue(s)
Component/s: Engine
Affects Version/s: 1.3.3
Fix Version/s: 1.5.1


 Description  « Hide
The following context diff shows a patch which cleans up the issue by reducing the possibility of a null pointer.

*** quickfixj/core/src/main/java/quickfix/MessageUtils.java Thu Jan 15 11:47:03 2009
--- quickfixj-svn/core/src/main/java/quickfix/MessageUtils.java Tue Jan 20 15:49:54 2009
***************
*** 104,107 ****
--- 104,116 ----
          String customApplVerID = null;
  
+ MessageFactory messageFactory = session.getMessageFactory();
+ DataDictionaryProvider ddProvider = session.getDataDictionaryProvider();
+ DataDictionary sessionDataDictionary = ddProvider.getSessionDataDictionary(beginString);
+ DataDictionary payloadDataDictionary = null;
+
+ // We check and if it's a Admin message we don't need anything more
+ if (MessageUtils.isAdminMessage(msgType)) {
+ payloadDataDictionary = sessionDataDictionary;
+ } else {
              if (FixVersions.BEGINSTRING_FIXT11.equals(beginString)) {
                  applVerID = getApplVerID(session, messageString);

***************
*** 111,128 ****
          }
          
! MessageFactory messageFactory = session.getMessageFactory();
!
! DataDictionaryProvider ddProvider = session.getDataDictionaryProvider();
! DataDictionary sessionDataDictionary = ddProvider.getSessionDataDictionary(beginString);
! DataDictionary applicationDataDictionary = ddProvider.getApplicationDataDictionary(
! applVerID, customApplVerID);
  
          quickfix.Message message = messageFactory.create(beginString, msgType);
! DataDictionary payloadDictionary = MessageUtils.isAdminMessage(msgType)
! ? sessionDataDictionary
! : applicationDataDictionary;
!
! message.parse(messageString, sessionDataDictionary, payloadDictionary,
! payloadDictionary != null);
          
          return message;

--- 120,130 ----
              }
  
! payloadDataDictionary = ddProvider.getApplicationDataDictionary(applVerID,
! customApplVerID);
! }
  
          quickfix.Message message = messageFactory.create(beginString, msgType);
! message.parse(messageString, sessionDataDictionary, payloadDataDictionary,
! payloadDataDictionary != null);
  
          return message;



 All   Comments   Change History      Sort Order: Ascending order - Click to sort in descending order
Jay Walters added a comment - 03/Feb/09 10:30 PM
A little bit more in a separate file to help with the same issue.
      • quickfixj/core/src/main/java/quickfix/DataDictionary.java Thu Jan 15 11:47:03 2009
      • quickfixj-svn/core/src/main/java/quickfix/DataDictionary.java Thu Jan 15 10:33:19 2009
        ***************
      • 256,260 ****
        */
        public boolean isHeaderField(int field) { ! return messageFields.get(HEADER_ID).contains(field); }

— 256,261 ----
*/
public boolean isHeaderField(int field) { ! Set<Integer> hdrFields = messageFields.get(HEADER_ID); ! return (hdrFields == null) ? false : hdrFields.contains(field); }

***************

      • 1092,1096 ****
        addXMLGroup(document, componentFieldNode, msgtype, dd, isRequired);
        }
        !
        if (componentFieldNode.getNodeName().equals("component")) { String required = getAttribute(componentFieldNode, "required"); --- 1093,1097 ---- addXMLGroup(document, componentFieldNode, msgtype, dd, isRequired); }
        ! // Also need to take into account nested components
        if (componentFieldNode.getNodeName().equals("component")) {
        String required = getAttribute(componentFieldNode, "required");