@@ -156,6 +156,8 @@ static int validate( FieldmlErrorHandler *errorHandler, xmlParserInputBufferPtr
156
156
errorHandler->logError ( errorMessage );
157
157
}
158
158
159
+ xmlResetLastError ();
160
+
159
161
return result;
160
162
}
161
163
@@ -198,6 +200,7 @@ static int parseObjectNode( xmlNodePtr objectNode, ParseState &state );
198
200
FmlObjectHandle getObjectAttribute ( xmlNodePtr node, const xmlChar *attribute, ParseState &state )
199
201
{
200
202
const char *objectName = getStringAttribute ( node, attribute );
203
+
201
204
if ( objectName == NULL )
202
205
{
203
206
return FML_INVALID_HANDLE;
@@ -216,6 +219,9 @@ FmlObjectHandle getObjectAttribute( xmlNodePtr node, const xmlChar *attribute, P
216
219
}
217
220
218
221
FmlObjectHandle objectHandle = Fieldml_GetObjectByName ( state.session , objectName );
222
+ if (objectHandle == FML_INVALID_HANDLE)
223
+ state.errorHandler ->logError ( " FieldML Object attribute not found" , objectName );
224
+
219
225
xmlFree (const_cast <char *>(objectName));
220
226
221
227
return objectHandle;
@@ -573,10 +579,24 @@ class BindParser :
573
579
FmlObjectHandle argument = getObjectAttribute ( objectNode, ARGUMENT_ATTRIB, state );
574
580
FmlObjectHandle source = getObjectAttribute ( objectNode, SOURCE_ATTRIB, state );
575
581
576
- if ( Fieldml_SetBind ( state. session , object, argument, source ) != FML_ERR_NO_ERROR )
582
+ if (FML_INVALID_HANDLE == argument )
577
583
{
578
- const char * argsAttrib = getStringAttribute ( objectNode, ARGUMENT_ATTRIB );
579
- const char * sourceAttrib = getStringAttribute ( objectNode, SOURCE_ATTRIB );
584
+ const char * argsAttrib = getStringAttribute ( objectNode, ARGUMENT_ATTRIB );
585
+ state.errorHandler ->logError ( " Incompatible bind" , argsAttrib);
586
+ xmlFree (const_cast <char *>(argsAttrib));
587
+ return 1 ;
588
+ }
589
+ else if (FML_INVALID_HANDLE == source)
590
+ {
591
+ const char * sourceAttrib = getStringAttribute ( objectNode, SOURCE_ATTRIB );
592
+ state.errorHandler ->logError ( " Incompatible bind" , sourceAttrib);
593
+ xmlFree (const_cast <char *>(sourceAttrib));
594
+ return 1 ;
595
+ }
596
+ else if ( Fieldml_SetBind ( state.session , object, argument, source ) != FML_ERR_NO_ERROR )
597
+ {
598
+ const char * argsAttrib = getStringAttribute ( objectNode, ARGUMENT_ATTRIB );
599
+ const char * sourceAttrib = getStringAttribute ( objectNode, SOURCE_ATTRIB );
580
600
state.errorHandler ->logError ( " Incompatible bind" , argsAttrib, sourceAttrib );
581
601
xmlFree (const_cast <char *>(argsAttrib));
582
602
xmlFree (const_cast <char *>(sourceAttrib));
0 commit comments