diff -up sblim-sfcb-1.3.16/cimXmlGen.c.escape sblim-sfcb-1.3.16/cimXmlGen.c --- sblim-sfcb-1.3.16/cimXmlGen.c.escape 2013-04-29 14:29:14.084335007 +0200 +++ sblim-sfcb-1.3.16/cimXmlGen.c 2013-04-29 14:28:44.000000000 +0200 @@ -70,6 +70,23 @@ const char *opGetClassNameChars(CMPIObje data2xml((data),(obj),(name),(refname),(btag),sizeof(btag)-1,(etag), \ sizeof(etag)-1,(sb),(qsb),(inst),(param)) +static int add_escaped_instance(UtilStringBuffer *sb, CMPIInstance *inst) +{ + UtilStringBuffer *instance; + + _SFCB_ENTER(TRACE_CIMXMLPROC, "add_escaped_instance"); + + instance = UtilFactory->newStrinBuffer(1024); + if (!instance) + _SFCB_RETURN(1); + + instance2xml(inst, instance, 0); + char *escaped = XMLEscape((char *) instance->ft->getCharPtr(instance), NULL); + sb->ft->appendChars(sb, escaped); + free(escaped); + instance->ft->release(instance); + _SFCB_RETURN(0); +} char *XMLEscape(char *in, int *outlen) { @@ -542,9 +559,7 @@ int value2xml(CMPIData d, UtilStringBuff } } else if(d.type == CMPI_instance) { - SFCB_APPENDCHARS_BLOCK(sb, ""); + add_escaped_instance(sb, d.value.inst); splen = 0; } else { @@ -754,9 +769,7 @@ void data2xml(CMPIData * data, void *obj else SFCB_APPENDCHARS_BLOCK(sb, "\" TYPE=\"string\">\n"); if(data->value.inst) { SFCB_APPENDCHARS_BLOCK(sb, ""); - SFCB_APPENDCHARS_BLOCK(sb, "value.inst, sb, 0); - SFCB_APPENDCHARS_BLOCK(sb, "]]>"); + add_escaped_instance(sb, data->value.inst); SFCB_APPENDCHARS_BLOCK(sb, "\n"); } }