Fix memory errors in qt_tilewidth and qt_tileheight
* qt_tilewidth and qt_tileheight are allocated with alloc() and need to be freed with free(). * Don't use them after they're freed. Instead, retrieve the size from the glyphs object.
This commit is contained in:
@@ -877,17 +877,14 @@ NetHackQtMainWindow::NetHackQtMainWindow(NetHackQtKeyBuffer& ks) :
|
|||||||
int w=screensize.width()-10; // XXX arbitrary extra space for frame
|
int w=screensize.width()-10; // XXX arbitrary extra space for frame
|
||||||
int h=screensize.height()-50;
|
int h=screensize.height()-50;
|
||||||
|
|
||||||
int maxwn;
|
int maxwn = 1400;
|
||||||
int maxhn;
|
int maxhn = 1024;
|
||||||
if (qt_tilewidth != NULL) {
|
if (qt_settings != NULL) {
|
||||||
maxwn = atoi(qt_tilewidth) * COLNO + 10;
|
auto glyphs = &qt_settings->glyphs();
|
||||||
} else {
|
if (glyphs != NULL) {
|
||||||
maxwn = 1400;
|
maxwn = glyphs->width() * COLNO + 10;
|
||||||
}
|
maxhn = glyphs->height() * ROWNO * 6/4;
|
||||||
if (qt_tileheight != NULL) {
|
}
|
||||||
maxhn = atoi(qt_tileheight) * ROWNO * 6/4;
|
|
||||||
} else {
|
|
||||||
maxhn = 1024;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Be exactly the size we want to be - full map...
|
// Be exactly the size we want to be - full map...
|
||||||
@@ -1239,6 +1236,9 @@ void NetHackQtMainWindow::layout()
|
|||||||
splittersizes[2] = w / 2 - (d * 1 / 4); // status
|
splittersizes[2] = w / 2 - (d * 1 / 4); // status
|
||||||
splittersizes[1] = d; // invusage
|
splittersizes[1] = d; // invusage
|
||||||
splittersizes[0] = w / 2 - (d * 3 / 4); // messages
|
splittersizes[0] = w / 2 - (d * 3 / 4); // messages
|
||||||
|
printf("w = %d d = %d splittersizes = %d %d %d\n",
|
||||||
|
w, d,
|
||||||
|
splittersizes[0], splittersizes[1], splittersizes[2]);
|
||||||
hsplitter->setSizes(splittersizes);
|
hsplitter->setSizes(splittersizes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -118,11 +118,13 @@ NetHackQtSettings::NetHackQtSettings() :
|
|||||||
// Tile/font sizes read from .nethackrc
|
// Tile/font sizes read from .nethackrc
|
||||||
if (qt_tilewidth != NULL) {
|
if (qt_tilewidth != NULL) {
|
||||||
tilewidth.setValue(atoi(qt_tilewidth));
|
tilewidth.setValue(atoi(qt_tilewidth));
|
||||||
delete[] qt_tilewidth;
|
free(qt_tilewidth);
|
||||||
|
qt_tilewidth = NULL;
|
||||||
}
|
}
|
||||||
if (qt_tileheight != NULL) {
|
if (qt_tileheight != NULL) {
|
||||||
tileheight.setValue(atoi(qt_tileheight));
|
tileheight.setValue(atoi(qt_tileheight));
|
||||||
delete[] qt_tileheight;
|
free(qt_tileheight);
|
||||||
|
qt_tileheight = NULL;
|
||||||
}
|
}
|
||||||
if (qt_fontsize != NULL) {
|
if (qt_fontsize != NULL) {
|
||||||
switch (tolower(qt_fontsize[0])) {
|
switch (tolower(qt_fontsize[0])) {
|
||||||
@@ -132,7 +134,8 @@ NetHackQtSettings::NetHackQtSettings() :
|
|||||||
case 's': default_fontsize = 3; break;
|
case 's': default_fontsize = 3; break;
|
||||||
case 't': default_fontsize = 4; break;
|
case 't': default_fontsize = 4; break;
|
||||||
}
|
}
|
||||||
delete[] qt_fontsize;
|
free(qt_fontsize);
|
||||||
|
qt_fontsize = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
theglyphs=new NetHackQtGlyphs();
|
theglyphs=new NetHackQtGlyphs();
|
||||||
|
|||||||
Reference in New Issue
Block a user