Try and make sscanf / snprintf work on both windows and Linux
sscanf_s exists in C11, but I didn't find it in CXX11 _snprintf_s does not exist in C11 or CXX11. C11 does have snprintf_s In combination with the fact that I think sscanf and snprintf are not used insecurely here (*), I used sscanf and snprintf, and added macros to select the microsoft/C11 alternatives on Windows. (*) Notes: Any insecurity of sscanf does not apply, as it is not reading strings. snprintf already does bounds-checking on the destination buffer, which is is much to large anyway. And as compilers (VC++ too, I assume...) usually check whether the format specifiers match the parameter types, there should be no need for an extra-secure version here either.
This commit is contained in:
parent
bb169ab3e8
commit
72805c0b66
@ -1,5 +1,6 @@
|
||||
#include "geometrywidget.h"
|
||||
#include "ui_geometrywidget.h"
|
||||
#include "porting.h"
|
||||
|
||||
|
||||
QMap<Geometry::Format, QString> Geometry::geometryIdNameMap;
|
||||
@ -8,7 +9,7 @@ QMap<QString, Geometry::Format> Geometry::geometryNameIdMap;
|
||||
bool Geometry::set(const char *s)
|
||||
{
|
||||
char sign[2];
|
||||
if (4 == sscanf_s(s," %d , %d : %d , %d", corner[0]+0, corner[0]+1, corner[1]+0, corner[1]+1)) {
|
||||
if (4 == sscanf(s," %d , %d : %d , %d", corner[0]+0, corner[0]+1, corner[1]+0, corner[1]+1)) {
|
||||
adjustCorners();
|
||||
// Order is important here!
|
||||
computeDimensions();
|
||||
@ -17,7 +18,7 @@ bool Geometry::set(const char *s)
|
||||
//GeometryWidget::setFormat(Corners);
|
||||
//todo select correct dropdown entry in widget
|
||||
}
|
||||
else if (4 == sscanf_s(s," %d , %d : %d x %d", center+0, center+1, dimension+0, dimension+1)) {
|
||||
else if (4 == sscanf(s," %d , %d : %d x %d", center+0, center+1, dimension+0, dimension+1)) {
|
||||
computeCorner0();
|
||||
computeCorner1();
|
||||
if (adjustCorners()) {
|
||||
@ -29,7 +30,7 @@ bool Geometry::set(const char *s)
|
||||
//GeometryWidget::setFormat(CornerDimensions);
|
||||
//todo select correct dropdown entry in widget
|
||||
}
|
||||
else if (4 == sscanf_s(s," %d , %d %c %d %c %d", corner[0]+0, corner[0]+1, sign+0, dimension+0, sign+1, dimension+1)) {
|
||||
else if (4 == sscanf(s," %d , %d %c %d %c %d", corner[0]+0, corner[0]+1, sign+0, dimension+0, sign+1, dimension+1)) {
|
||||
for (int i = 0; i < 2; i++)
|
||||
if (sign[i] == '-') dimension[i] = -dimension[i];
|
||||
computeCenter();
|
||||
@ -42,7 +43,7 @@ bool Geometry::set(const char *s)
|
||||
//GeometryWidget::setFormat(CornerDimensions);
|
||||
//todo select correct dropdown entry in widget
|
||||
}
|
||||
else if (4 == sscanf_s(s," %d x %d %c %d %c %d", dimension+0, dimension+1, sign+0, corner[0]+0, sign+1, corner[0]+1)) {
|
||||
else if (4 == sscanf(s," %d x %d %c %d %c %d", dimension+0, dimension+1, sign+0, corner[0]+0, sign+1, corner[0]+1)) {
|
||||
for (int i = 0; i < 2; i++)
|
||||
if (sign[i] == '-') corner[0][i] = -corner[0][i];
|
||||
computeCenter();
|
||||
@ -55,7 +56,7 @@ bool Geometry::set(const char *s)
|
||||
//GeometryWidget::setFormat(CornerDimensions);
|
||||
//todo select correct dropdown entry in widget
|
||||
}
|
||||
else if (2 == sscanf_s(s," %d x %d", dimension+0, dimension+1)) {
|
||||
else if (2 == sscanf(s," %d x %d", dimension+0, dimension+1)) {
|
||||
center[0] = 0;
|
||||
center[1] = 0;
|
||||
computeCorner0();
|
||||
@ -143,16 +144,16 @@ QString Geometry::getString(Geometry::Format format)
|
||||
int n = -1;
|
||||
switch (format) {
|
||||
case CenterDimensions:
|
||||
n = _snprintf_s(buffer, BUFSIZE, "%d,%d:%dx%d", center[0], center[1], dimension[0], dimension[1]);
|
||||
n = snprintf(buffer, BUFSIZE, "%d,%d:%dx%d", center[0], center[1], dimension[0], dimension[1]);
|
||||
//search alternative for snptintf
|
||||
break;
|
||||
case CornerDimensions:
|
||||
n = _snprintf_s(buffer, BUFSIZE, "%d,%d+%d+%d", corner[0][0], corner[0][1], dimension[0], dimension[1]);
|
||||
n = snprintf(buffer, BUFSIZE, "%d,%d+%d+%d", corner[0][0], corner[0][1], dimension[0], dimension[1]);
|
||||
//search alternative for snptintf
|
||||
break;
|
||||
case Corners:
|
||||
default:
|
||||
n = _snprintf_s(buffer, BUFSIZE, "%d,%d:%d,%d", corner[0][0], corner[0][1], corner[1][0], corner[1][1]);
|
||||
n = snprintf(buffer, BUFSIZE, "%d,%d:%d,%d", corner[0][0], corner[0][1], corner[1][0], corner[1][1]);
|
||||
//search alternative for snptintf
|
||||
break;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user