Fri Aug 17 18:42:44 2012 UTC ()
Final part of fix for SA40476, c.f. http://gna.org/bugs/?20003
(prlw1)
diff -r1.37 -r1.38 pkgsrc/games/freeciv-server/Makefile
diff -r1.21 -r1.22 pkgsrc/games/freeciv-share/Makefile
diff -r1.26 -r1.27 pkgsrc/games/freeciv-share/distinfo
diff -r0 -r1.1 pkgsrc/games/freeciv-share/patches/patch-common_dataio.c
diff -r0 -r1.1 pkgsrc/games/freeciv-share/patches/patch-common_dataio.h
diff -r0 -r1.1 pkgsrc/games/freeciv-share/patches/patch-common_generate__packets.py
--- pkgsrc/games/freeciv-server/Makefile 2012/07/31 15:49:37 1.37
+++ pkgsrc/games/freeciv-server/Makefile 2012/08/17 18:42:43 1.38
| @@ -1,16 +1,17 @@ | | | @@ -1,16 +1,17 @@ |
1 | # $NetBSD: Makefile,v 1.37 2012/07/31 15:49:37 prlw1 Exp $ | | 1 | # $NetBSD: Makefile,v 1.38 2012/08/17 18:42:43 prlw1 Exp $ |
2 | | | 2 | |
3 | PKGNAME= ${DISTNAME:S/-/-server-/} | | 3 | PKGNAME= ${DISTNAME:S/-/-server-/} |
| | | 4 | PKGREVISION= 1 |
4 | COMMENT= Freeciv game server | | 5 | COMMENT= Freeciv game server |
5 | | | 6 | |
6 | DEPENDS+= freeciv-share>=${FC_VERS}:../../games/freeciv-share | | 7 | DEPENDS+= freeciv-share>=${FC_VERS}:../../games/freeciv-share |
7 | | | 8 | |
8 | PKG_DESTDIR_SUPPORT= user-destdir | | 9 | PKG_DESTDIR_SUPPORT= user-destdir |
9 | | | 10 | |
10 | #MAKE_JOBS_SAFE= no | | 11 | #MAKE_JOBS_SAFE= no |
11 | | | 12 | |
12 | USE_GNU_READLINE= yes | | 13 | USE_GNU_READLINE= yes |
13 | CONFIGURE_ARGS+= --disable-make-data | | 14 | CONFIGURE_ARGS+= --disable-make-data |
14 | CONFIGURE_ARGS+= --enable-client=no | | 15 | CONFIGURE_ARGS+= --enable-client=no |
15 | CONFIGURE_ARGS+= --disable-gtktest | | 16 | CONFIGURE_ARGS+= --disable-gtktest |
16 | CONFIGURE_ARGS+= --with-readline | | 17 | CONFIGURE_ARGS+= --with-readline |
--- pkgsrc/games/freeciv-share/Makefile 2012/07/31 15:49:37 1.21
+++ pkgsrc/games/freeciv-share/Makefile 2012/08/17 18:42:43 1.22
| @@ -1,14 +1,15 @@ | | | @@ -1,14 +1,15 @@ |
1 | # $NetBSD: Makefile,v 1.21 2012/07/31 15:49:37 prlw1 Exp $ | | 1 | # $NetBSD: Makefile,v 1.22 2012/08/17 18:42:43 prlw1 Exp $ |
2 | | | 2 | |
3 | PKGNAME= ${DISTNAME:S/-/-share-/} | | 3 | PKGNAME= ${DISTNAME:S/-/-share-/} |
| | | 4 | PKGREVISION= 1 |
4 | COMMENT= Machine independent files for Freeciv | | 5 | COMMENT= Machine independent files for Freeciv |
5 | | | 6 | |
6 | PKG_DESTDIR_SUPPORT= user-destdir | | 7 | PKG_DESTDIR_SUPPORT= user-destdir |
7 | | | 8 | |
8 | .include "../../games/freeciv-share/Makefile.common" | | 9 | .include "../../games/freeciv-share/Makefile.common" |
9 | | | 10 | |
10 | CONFIGURE_ARGS+= --disable-server | | 11 | CONFIGURE_ARGS+= --disable-server |
11 | CONFIGURE_ARGS+= --enable-client=no | | 12 | CONFIGURE_ARGS+= --enable-client=no |
12 | CONFIGURE_ARGS+= --enable-make-data | | 13 | CONFIGURE_ARGS+= --enable-make-data |
13 | | | 14 | |
14 | .include "../../mk/bsd.pkg.mk" | | 15 | .include "../../mk/bsd.pkg.mk" |
--- pkgsrc/games/freeciv-share/distinfo 2012/08/03 12:03:13 1.26
+++ pkgsrc/games/freeciv-share/distinfo 2012/08/17 18:42:43 1.27
| @@ -1,7 +1,10 @@ | | | @@ -1,7 +1,10 @@ |
1 | $NetBSD: distinfo,v 1.26 2012/08/03 12:03:13 prlw1 Exp $ | | 1 | $NetBSD: distinfo,v 1.27 2012/08/17 18:42:43 prlw1 Exp $ |
2 | | | 2 | |
3 | SHA1 (freeciv-2.3.2.tar.bz2) = e6267b5e0483cf9c29d01793d2f9433e73d62191 | | 3 | SHA1 (freeciv-2.3.2.tar.bz2) = e6267b5e0483cf9c29d01793d2f9433e73d62191 |
4 | RMD160 (freeciv-2.3.2.tar.bz2) = 63bea690cfd6953bfb30d320a3e3f7a69353b64c | | 4 | RMD160 (freeciv-2.3.2.tar.bz2) = 63bea690cfd6953bfb30d320a3e3f7a69353b64c |
5 | Size (freeciv-2.3.2.tar.bz2) = 30695128 bytes | | 5 | Size (freeciv-2.3.2.tar.bz2) = 30695128 bytes |
6 | SHA1 (patch-aa) = bac3e05393c154defd288cc621606a3dbd7f00eb | | 6 | SHA1 (patch-aa) = bac3e05393c154defd288cc621606a3dbd7f00eb |
| | | 7 | SHA1 (patch-common_dataio.c) = 6fd08d7185f953fbfdc2c554ad67c4e5c8f2be87 |
| | | 8 | SHA1 (patch-common_dataio.h) = 4a513230ee814269466959fcb977b1360a78ee53 |
| | | 9 | SHA1 (patch-common_generate__packets.py) = 0fb74f024d1ada9ad85f62b12099c385d1e972c7 |
7 | SHA1 (patch-common_packets.c) = 7ea66b3d0068a1255d818a9808bf7e581c95fb71 | | 10 | SHA1 (patch-common_packets.c) = 7ea66b3d0068a1255d818a9808bf7e581c95fb71 |
$NetBSD: patch-common_dataio.c,v 1.1 2012/08/17 18:42:44 prlw1 Exp $
Fixes part 2 of http://secunia.com/advisories/40476/
c.f. https://gna.org/bugs/?20003
--- common/dataio.c.orig 2012-03-31 12:35:45.000000000 +0000
+++ common/dataio.c
@@ -408,7 +408,7 @@ void dio_put_worklist(struct data_out *d
Receive uint8 value to dest. In case of failure, value stored to dest
will be zero. Note that zero is legal value even when there is no failure.
**************************************************************************/
-void dio_get_uint8(struct data_in *din, int *dest)
+bool dio_get_uint8(struct data_in *din, int *dest)
{
if (enough_data(din, 1)) {
if (dest) {
@@ -421,14 +421,18 @@ void dio_get_uint8(struct data_in *din,
din->current++;
} else if (dest) {
*dest = 0;
+
+ return FALSE;
}
+
+ return TRUE;
}
/**************************************************************************
Receive uint16 value to dest. In case of failure, value stored to dest
will be zero. Note that zero is legal value even when there is no failure.
**************************************************************************/
-void dio_get_uint16(struct data_in *din, int *dest)
+bool dio_get_uint16(struct data_in *din, int *dest)
{
if (enough_data(din, 2)) {
if (dest) {
@@ -441,14 +445,18 @@ void dio_get_uint16(struct data_in *din,
din->current += 2;
} else if (dest) {
*dest = 0;
+
+ return FALSE;
}
+
+ return TRUE;
}
/**************************************************************************
Receive uint32 value to dest. In case of failure, value stored to dest
will be zero. Note that zero is legal value even when there is no failure.
**************************************************************************/
-void dio_get_uint32(struct data_in *din, int *dest)
+bool dio_get_uint32(struct data_in *din, int *dest)
{
if (enough_data(din, 4)) {
if (dest) {
@@ -461,17 +469,22 @@ void dio_get_uint32(struct data_in *din,
din->current += 4;
} else if (dest) {
*dest = 0;
+
+ return FALSE;
}
+
+ return TRUE;
}
/**************************************************************************
...
**************************************************************************/
-void dio_get_bool8(struct data_in *din, bool * dest)
+bool dio_get_bool8(struct data_in *din, bool * dest)
{
int ival;
+ bool retval;
- dio_get_uint8(din, &ival);
+ retval = dio_get_uint8(din, &ival);
if (ival != 0 && ival != 1) {
log_error("Received value isn't boolean: %d", ival);
@@ -479,16 +492,19 @@ void dio_get_bool8(struct data_in *din,
}
*dest = (ival != 0);
+
+ return retval;
}
/**************************************************************************
...
**************************************************************************/
-void dio_get_bool32(struct data_in *din, bool * dest)
+bool dio_get_bool32(struct data_in *din, bool * dest)
{
int ival = 0;
+ bool retval;
- dio_get_uint32(din, &ival);
+ retval = dio_get_uint32(din, &ival);
if (ival != 0 && ival != 1) {
log_error("Received value isn't boolean: %d", ival);
@@ -496,57 +512,69 @@ void dio_get_bool32(struct data_in *din,
}
*dest = (ival != 0);
+
+ return retval;
}
/**************************************************************************
...
**************************************************************************/
-void dio_get_sint8(struct data_in *din, int *dest)
+bool dio_get_sint8(struct data_in *din, int *dest)
{
int tmp;
+ bool retval;
- dio_get_uint8(din, &tmp);
+ retval = dio_get_uint8(din, &tmp);
if (dest) {
if (tmp > 0x7f) {
tmp -= 0x100;
}
*dest = tmp;
}
+
+ return retval;
}
/**************************************************************************
...
**************************************************************************/
-void dio_get_sint16(struct data_in *din, int *dest)
+bool dio_get_sint16(struct data_in *din, int *dest)
{
int tmp = 0;
+ bool retval;
- dio_get_uint16(din, &tmp);
+ retval = dio_get_uint16(din, &tmp);
if (dest) {
if (tmp > 0x7fff) {
tmp -= 0x10000;
}
*dest = tmp;
}
+
+ return retval;
}
/**************************************************************************
...
**************************************************************************/
-void dio_get_memory(struct data_in *din, void *dest, size_t dest_size)
+bool dio_get_memory(struct data_in *din, void *dest, size_t dest_size)
{
if (enough_data(din, dest_size)) {
if (dest) {
memcpy(dest, ADD_TO_POINTER(din->src, din->current), dest_size);
}
din->current += dest_size;
+ } else {
+ return FALSE;
}
+
+ return TRUE;
}
/**************************************************************************
...
**************************************************************************/
-void dio_get_string(struct data_in *din, char *dest, size_t max_dest_size)
+bool dio_get_string(struct data_in *din, char *dest, size_t max_dest_size)
{
char *c;
size_t ps_len; /* length in packet, not including null */
@@ -556,7 +584,7 @@ void dio_get_string(struct data_in *din,
if (!enough_data(din, 1)) {
dest[0] = '\0';
- return;
+ return FALSE;
}
remaining = dio_input_remaining(din);
@@ -582,37 +610,40 @@ void dio_get_string(struct data_in *din,
if (!din->too_short) {
din->current += (ps_len + 1); /* past terminator */
}
+
+ return TRUE;
}
/**************************************************************************
...
**************************************************************************/
-void dio_get_bit_string(struct data_in *din, char *dest,
+bool dio_get_bit_string(struct data_in *din, char *dest,
size_t max_dest_size)
{
int npack = 0; /* number claimed in packet */
int i; /* iterate the bytes */
+ bool retval;
fc_assert(dest != NULL && max_dest_size > 0);
if (!enough_data(din, 1)) {
dest[0] = '\0';
- return;
+ return FALSE;
}
- dio_get_uint16(din, &npack);
+ retval = dio_get_uint16(din, &npack);
if (npack >= max_dest_size) {
log_error("Have size for %lu, got %d",
(unsigned long) max_dest_size, npack);
din->bad_bit_string = TRUE;
dest[0] = '\0';
- return;
+ return FALSE;
}
for (i = 0; i < npack;) {
int bit, byte_value;
- dio_get_uint8(din, &byte_value);
+ retval = dio_get_uint8(din, &byte_value);
for (bit = 0; bit < 8 && i < npack; bit++, i++) {
if (TEST_BIT(byte_value, bit)) {
dest[i] = '1';
@@ -627,17 +658,20 @@ void dio_get_bit_string(struct data_in *
if (din->too_short) {
din->bad_bit_string = TRUE;
}
+
+ return retval;
}
/**************************************************************************
...
**************************************************************************/
-void dio_get_tech_list(struct data_in *din, int *dest)
+bool dio_get_tech_list(struct data_in *din, int *dest)
{
int i;
+ bool retval;
for (i = 0; i < MAX_NUM_TECH_LIST; i++) {
- dio_get_uint8(din, &dest[i]);
+ retval = dio_get_uint8(din, &dest[i]);
if (dest[i] == A_LAST) {
break;
}
@@ -646,56 +680,66 @@ void dio_get_tech_list(struct data_in *d
for (; i < MAX_NUM_TECH_LIST; i++) {
dest[i] = A_LAST;
}
+
+ return retval;
}
/**************************************************************************
...
**************************************************************************/
-void dio_get_worklist(struct data_in *din, struct worklist *pwl)
+bool dio_get_worklist(struct data_in *din, struct worklist *pwl)
{
int i, length;
+ bool retval;
worklist_init(pwl);
- dio_get_uint8(din, &length);
+ retval = dio_get_uint8(din, &length);
for (i = 0; i < length; i++) {
int identifier;
int kind;
dio_get_uint8(din, &kind);
- dio_get_uint8(din, &identifier);
+ retval = dio_get_uint8(din, &identifier);
worklist_append(pwl, universal_by_number(kind, identifier));
}
+
+ return retval;
}
/**************************************************************************
...
**************************************************************************/
-void dio_get_uint8_vec8(struct data_in *din, int **values, int stop_value)
+bool dio_get_uint8_vec8(struct data_in *din, int **values, int stop_value)
{
int count, inx;
+ bool retval;
- dio_get_uint8(din, &count);
+ retval = dio_get_uint8(din, &count);
if (values) {
*values = fc_calloc((count + 1), sizeof(**values));
}
for (inx = 0; inx < count; inx++) {
- dio_get_uint8(din, values ? &((*values)[inx]) : NULL);
+ retval = dio_get_uint8(din, values ? &((*values)[inx]) : NULL);
}
if (values) {
(*values)[inx] = stop_value;
}
+
+ return retval;
}
/**************************************************************************
Receive vector of uint6 values.
**************************************************************************/
-void dio_get_uint16_vec8(struct data_in *din, int **values, int stop_value)
+bool dio_get_uint16_vec8(struct data_in *din, int **values, int stop_value)
{
int count, inx;
+ bool retval;
+
+ retval = dio_get_uint8(din, &count);
- dio_get_uint8(din, &count);
if (values) {
*values = fc_calloc((count + 1), sizeof(**values));
}
@@ -705,23 +749,28 @@ void dio_get_uint16_vec8(struct data_in
if (values) {
(*values)[inx] = stop_value;
}
+
+ return retval;
}
/**************************************************************************
De-serialize a requirement.
**************************************************************************/
-void dio_get_requirement(struct data_in *din, struct requirement *preq)
+bool dio_get_requirement(struct data_in *din, struct requirement *preq)
{
int type, range, value;
bool survives, negated;
+ bool retval;
dio_get_uint8(din, &type);
dio_get_sint32(din, &value);
dio_get_uint8(din, &range);
dio_get_bool8(din, &survives);
- dio_get_bool8(din, &negated);
+ retval = dio_get_bool8(din, &negated);
*preq = req_from_values(type, range, survives, negated, value);
+
+ return retval;
}
/**************************************************************************
$NetBSD: patch-common_dataio.h,v 1.1 2012/08/17 18:42:44 prlw1 Exp $
Fixes part 2 of http://secunia.com/advisories/40476/
c.f. https://gna.org/bugs/?20003
--- common/dataio.h.orig 2012-03-31 12:35:45.000000000 +0000
+++ common/dataio.h
@@ -53,27 +53,27 @@ size_t dio_input_remaining(struct data_i
/* gets */
-void dio_get_uint8(struct data_in *din, int *dest);
-void dio_get_uint16(struct data_in *din, int *dest);
-void dio_get_uint32(struct data_in *din, int *dest);
+bool dio_get_uint8(struct data_in *din, int *dest);
+bool dio_get_uint16(struct data_in *din, int *dest);
+bool dio_get_uint32(struct data_in *din, int *dest);
-void dio_get_sint8(struct data_in *din, int *dest);
-void dio_get_sint16(struct data_in *din, int *dest);
+bool dio_get_sint8(struct data_in *din, int *dest);
+bool dio_get_sint16(struct data_in *din, int *dest);
#define dio_get_sint32(d,v) dio_get_uint32(d,v)
-void dio_get_bool8(struct data_in *din, bool *dest);
-void dio_get_bool32(struct data_in *din, bool *dest);
-void dio_get_memory(struct data_in *din, void *dest, size_t dest_size);
-void dio_get_string(struct data_in *din, char *dest, size_t max_dest_size);
-void dio_get_bit_string(struct data_in *din, char *dest,
+bool dio_get_bool8(struct data_in *din, bool *dest);
+bool dio_get_bool32(struct data_in *din, bool *dest);
+bool dio_get_memory(struct data_in *din, void *dest, size_t dest_size);
+bool dio_get_string(struct data_in *din, char *dest, size_t max_dest_size);
+bool dio_get_bit_string(struct data_in *din, char *dest,
size_t max_dest_size);
-void dio_get_tech_list(struct data_in *din, int *dest);
-void dio_get_worklist(struct data_in *din, struct worklist *pwl);
-void dio_get_requirement(struct data_in *din, struct requirement *preq);
+bool dio_get_tech_list(struct data_in *din, int *dest);
+bool dio_get_worklist(struct data_in *din, struct worklist *pwl);
+bool dio_get_requirement(struct data_in *din, struct requirement *preq);
-void dio_get_uint8_vec8(struct data_in *din, int **values, int stop_value);
-void dio_get_uint16_vec8(struct data_in *din, int **values, int stop_value);
+bool dio_get_uint8_vec8(struct data_in *din, int **values, int stop_value);
+bool dio_get_uint16_vec8(struct data_in *din, int **values, int stop_value);
/* Should be a function but we need some macro magic. */
#define DIO_BV_GET(pdin, bv) \
$NetBSD: patch-common_generate__packets.py,v 1.1 2012/08/17 18:42:44 prlw1 Exp $
Fixes part 2 of http://secunia.com/advisories/40476/
c.f. https://gna.org/bugs/?20003
--- common/generate_packets.py.orig 2012-08-01 17:10:51.000000000 +0000
+++ common/generate_packets.py
@@ -546,11 +546,13 @@ class Field:
for (;;) {
int i;
- dio_get_uint8(&din, &i);
- if(i == 255) {
+ if (!dio_get_uint8(&din, &i)) {
break;
}
- if(i > %(array_size_u)s) {
+ if (i == 255) {
+ break;
+ }
+ if (i > %(array_size_u)s) {
log_error("packets_gen.c: WARNING: ignoring intra array diff");
} else {
%(c)s