diff --git a/contrib/opvp/gdevopvp.c b/contrib/opvp/gdevopvp.c index 70475ad..013a497 100644 --- a/contrib/opvp/gdevopvp.c +++ b/contrib/opvp/gdevopvp.c @@ -185,7 +185,7 @@ static int opvp_copy_color(gx_device *, const byte *, int, int, static int _get_params(gs_param_list *); static int opvp_get_params(gx_device *, gs_param_list *); static int oprp_get_params(gx_device *, gs_param_list *); -static int _put_params(gs_param_list *); +static int _put_params(gx_device *, gs_param_list *); static int opvp_put_params(gx_device *, gs_param_list *); static int oprp_put_params(gx_device *, gs_param_list *); static int opvp_fill_path(gx_device *, const gs_gstate *, gx_path *, @@ -3043,7 +3043,7 @@ _get_params(gs_param_list *plist) /* vector driver name */ pname = "Driver"; vdps.data = (byte *)vectorDriver; - vdps.size = (vectorDriver ? strlen(vectorDriver) + 1 : 0); + vdps.size = (vectorDriver ? strlen(vectorDriver) : 0); vdps.persistent = false; code = param_write_string(plist, pname, &vdps); if (code) ecode = code; @@ -3180,7 +3180,7 @@ oprp_get_params(gx_device *dev, gs_param_list *plist) * put params */ static int -_put_params(gs_param_list *plist) +_put_params(gx_device *dev, gs_param_list *plist) { int code; int ecode = 0; @@ -3202,6 +3202,12 @@ _put_params(gs_param_list *plist) code = param_read_string(plist, pname, &vdps); switch (code) { case 0: + if (gs_is_path_control_active(dev->memory) + && (!vectorDriver || strlen(vectorDriver) != vdps.size + || memcmp(vectorDriver, vdps.data, vdps.size) != 0)) { + param_signal_error(plist, pname, gs_error_invalidaccess); + return_error(gs_error_invalidaccess); + } buff = realloc(buff, vdps.size + 1); memcpy(buff, vdps.data, vdps.size); buff[vdps.size] = 0; @@ -3403,7 +3409,7 @@ opvp_put_params(gx_device *dev, gs_param_list *plist) int code; /* put params */ - code = _put_params(plist); + code = _put_params(dev, plist); if (code) return code; /* put default params */ @@ -3419,7 +3425,7 @@ oprp_put_params(gx_device *dev, gs_param_list *plist) int code; /* put params */ - code = _put_params(plist); + code = _put_params(dev, plist); if (code) return code; /* put default params */