--- server/plrhand.c.orig Thu Jul 20 05:04:13 2000 +++ server/plrhand.c Sat Jul 29 09:45:01 2000 @@ -1740,6 +1740,12 @@ void handle_player_worklist(struct player *pplayer, struct packet_player_request *preq) { + if (preq->wl_idx < 0 || preq->wl_idx >= MAX_NUM_WORKLISTS) { + freelog(LOG_NORMAL, "Bad worklist index (%d) received from %s", + preq->wl_idx, pplayer->name); + return; + } + copy_worklist(&pplayer->worklists[preq->wl_idx], &preq->worklist); send_player_info(pplayer, pplayer); } --- common/worklist.c.orig Sun Apr 9 04:58:26 2000 +++ common/worklist.c Sat Jul 29 10:58:15 2000 @@ -105,9 +105,7 @@ } void copy_worklist(struct worklist *dst, struct worklist *src) { - memcpy(dst->ids, src->ids, sizeof(int) * MAX_LEN_WORKLIST); - strcpy(dst->name, src->name); - dst->is_valid = src->is_valid; + memcpy(dst, src, sizeof(struct worklist)); } void worklist_remove(struct worklist *pwl, int idx) {