Bartosz Kosiorek (@gang65) commented about dlls/gdiplus/graphicspath.c:
for(j = start; j <= i; j++){
/* copy points coordinate of subpath in reverse order */ revpath.Points[j] = path->pathdata.Points[count-j-1];
revpath.Types[j] = path->pathdata.Types[count-j-1];
/* copy points type shifted by one (j + 1), as the first point type is always PathPointTypeStart */
if (j < i)
revpath.Types[j + 1] = path->pathdata.Types[count - j - 1]; }
/* mark start point */
/* first point of subpath is always Start point */ revpath.Types[start] = PathPointTypeStart;
/* set 'figure' endpoint type */
/* check if subpath contains more than 1 point */ if(i-start > 1){
revpath.Types[i] = path->pathdata.Types[count-start-1] & ~PathPointTypePathTypeMask;
revpath.Types[i] |= revpath.Types[i-1];
This line is a workaround, as it duplicate value of for last point type, from previous point. Current implementation is fixing that by taking real values of types.