Some of the size calculations don't seem to match.
+ if (pendata->PenDataFlags & PenDataTransform) + offset += sizeof(GpMatrix);
+ if (pendata->PenDataFlags & PenDataTransform) + { + FIXME("PenDataTransform is not supported.\n"); + offset += sizeof(EmfPlusTransformMatrix); + }
+ if (pendata->PenDataFlags & PenDataDashedLine) + { + EmfPlusDashedLineData *dashedline = (EmfPlusDashedLineData *)((BYTE *)data + offset); + + offset += FIELD_OFFSET(EmfPlusDashedLineData, data); + if (data_size <= offset) + return InvalidParameter; + + offset += dashedline->DashedLineDataSize; + }
+ if (pendata->PenDataFlags & PenDataDashedLine) + { + EmfPlusDashedLineData *dashedline = (EmfPlusDashedLineData *)((BYTE *)pendata + offset); + FIXME("PenDataDashedLine is not supported.\n"); + offset += dashedline->DashedLineDataSize; + }
Thanks, it was a bit worse than that, I sent fixed version.