diff --git a/code/base/test_base.cpp b/code/base/test_base.cpp index 050d3d3..69bdef1 100644 --- a/code/base/test_base.cpp +++ b/code/base/test_base.cpp @@ -876,10 +876,25 @@ public: { return SCANNER_ERR_DATA_DAMAGED; } - unsigned int len = 0; - int ret = SCANNER_ERR_OK; + wchar_t* p = (wchar_t*)data; + std::string str; + int ret = SCANNER_ERR_OK, + dpi = 0; + unsigned int len = sizeof(int); + size_t strl = 0; + ret = wchar_to_char(str, p, &strl); + if (ret == ERROR_INSUFFICIENT_BUFFER) + { + str.resize(strl); + ret = wchar_to_char(str, p, &strl); + } + if (str.empty()) + { + return SCANNER_ERR_DATA_DAMAGED; + } + dpi = atoi(str.c_str()); + ret = helper_->io_control(IO_CTRL_CODE_SET_DPI, &dpi, &len); - ret = helper_->io_control(IO_CTRL_CODE_SET_DPI, data, &len); if (ret != SCANNER_ERR_OK) { return -1; @@ -893,12 +908,29 @@ public: { return SCANNER_ERR_DATA_DAMAGED; } - int ret = SCANNER_ERR_OK, - val = 0; + wchar_t* p = (wchar_t*)data; + std::string str; + + + int ret = SCANNER_ERR_OK, + val = 0, + dpi = 0; SANE_Bool type = true; unsigned int len = sizeof(SANE_Bool), llen = sizeof(int); - ret = helper_->io_control(IO_CTRL_CODE_SET_DPI, &data, &len); + size_t strl = 0; + ret = wchar_to_char(str, p, &strl); + if (ret == ERROR_INSUFFICIENT_BUFFER) + { + str.resize(strl); + ret = wchar_to_char(str, p, &strl); + } + if (str.empty()) + { + return SCANNER_ERR_DATA_DAMAGED; + } + dpi = atoi(str.c_str()); + ret = helper_->io_control(IO_CTRL_CODE_SET_DPI, &dpi, &llen); ret = helper_->io_control(IO_CTRL_CODE_SET_DISTORTION_IMAGE, &type, &len); if (ret != SCANNER_ERR_OK)