cvar_string = Cvar_VariableString(name);
- strcpy(out, cvar_string);
+ strlcpy(out, cvar_string, VM_STRINGTEMP_LENGTH);
PRVM_G_INT(OFS_RETURN) = PRVM_SetEngineString(out);
}
cvar_string = Cvar_VariableDefString(name);
- strcpy(out, cvar_string);
+ strlcpy(out, cvar_string, VM_STRINGTEMP_LENGTH);
PRVM_G_INT(OFS_RETURN) = PRVM_SetEngineString(out);
}
/*
========================
-VM_itoe
+VM_ftoe
-intt ftoi(float num)
+entity ftoe(float num)
========================
*/
-void VM_ftoi(void)
+void VM_ftoe(void)
{
int ent;
- VM_SAFEPARMCOUNT(1, VM_ftoi);
+ VM_SAFEPARMCOUNT(1, VM_ftoe);
ent = (int)PRVM_G_FLOAT(OFS_PARM0);
- if(PRVM_PROG_TO_EDICT(ent)->priv.required->free)
- PRVM_ERROR ("VM_ftoe: %s tried to access a freed entity (entity %i)!", PRVM_NAME, ent);
+ if (ent < 0 || ent >= MAX_EDICTS || PRVM_PROG_TO_EDICT(ent)->priv.required->free)
+ ent = 0; // return world instead of a free or invalid entity
PRVM_G_INT(OFS_RETURN) = ent;
}
ed = PRVM_G_EDICT(OFS_PARM0);
if( PRVM_NUM_FOR_EDICT(ed) <= prog->reserved_edicts )
{
- Con_DPrint( "VM_remove: tried to remove the null entity or a reserved entity!\n" );
if (developer.integer >= 1)
- PRVM_PrintState();
+ VM_Warning( "VM_remove: tried to remove the null entity or a reserved entity!\n" );
}
else if( ed->priv.required->free )
{
- Con_DPrint( "VM_remove: tried to remove an already freed entity!\n" );
if (developer.integer >= 1)
- PRVM_PrintState();
+ VM_Warning( "VM_remove: tried to remove an already freed entity!\n" );
}
else
PRVM_ED_Free (ed);
*/
void VM_rint (void)
{
- float f;
-
+ float f;
VM_SAFEPARMCOUNT(1,VM_rint);
f = PRVM_G_FLOAT(OFS_PARM0);
if (f > 0)
- PRVM_G_FLOAT(OFS_RETURN) = (int)(f + 0.5);
+ PRVM_G_FLOAT(OFS_RETURN) = floor(f + 0.5);
else
- PRVM_G_FLOAT(OFS_RETURN) = (int)(f - 0.5);
+ PRVM_G_FLOAT(OFS_RETURN) = ceil(f - 0.5);
}
/*
{
char *out;
char string[VM_STRINGTEMP_LENGTH];
+ size_t alloclen;
VM_SAFEPARMCOUNT(1,VM_strzone);
VM_VarString(0, string, sizeof(string));
- PRVM_G_INT(OFS_RETURN) = PRVM_AllocString(strlen(string) + 1, &out);
- strcpy(out, string);
+ alloclen = strlen(string) + 1;
+ PRVM_G_INT(OFS_RETURN) = PRVM_AllocString(alloclen, &out);
+ memcpy(out, string, alloclen);
}
/*
pos = 0;
while(COM_ParseToken(&p, false))
{
+ size_t tokenlen;
if (num_tokens >= (int)(sizeof(tokens)/sizeof(tokens[0])))
break;
- if (pos + strlen(com_token) + 1 > sizeof(tokenbuf))
+ tokenlen = strlen(com_token) + 1;
+ if (pos + tokenlen > sizeof(tokenbuf))
break;
tokens[num_tokens++] = tokenbuf + pos;
- strcpy(tokenbuf + pos, com_token);
- pos += strlen(com_token) + 1;
+ memcpy(tokenbuf + pos, com_token, tokenlen);
+ pos += tokenlen;
}
PRVM_G_FLOAT(OFS_RETURN) = num_tokens;
}
tmp = VM_GetTempString();
- strcpy(tmp, VM_SEARCHLIST[handle]->filenames[filenum]);
+ strlcpy(tmp, VM_SEARCHLIST[handle]->filenames[filenum], VM_STRINGTEMP_LENGTH);
PRVM_G_INT(OFS_RETURN) = PRVM_SetEngineString(tmp);
}
tmp = VM_GetTempString();
- strcpy(tmp, Key_KeynumToString(keynum));
+ strlcpy(tmp, Key_KeynumToString(keynum), VM_STRINGTEMP_LENGTH);
PRVM_G_INT(OFS_RETURN) = PRVM_SetEngineString(tmp);
}
if(picname[0])
p->tex = Draw_CachePic(picname, true)->tex;
else
- p->tex = r_texture_notexture;
+ p->tex = r_texture_white;
p->flags = (unsigned char)PRVM_G_FLOAT(OFS_PARM1);
vm_current_vertices = 0;
vm_polygonbegin = true;
p->data[vm_current_vertices*3] = coords[0];
p->data[1+vm_current_vertices*3] = coords[1];
- if(!(p->flags & VM_POLYGON_FL2D))
- p->data[2+vm_current_vertices*3] = coords[2];
+ p->data[2+vm_current_vertices*3] = coords[2];
p->data[12+vm_current_vertices*2] = tx[0];
if(!(p->flags & VM_POLYGON_FLLINES))
return;
}
- strcpy( out, in );
+ strlcpy(out, in, VM_STRINGTEMP_LENGTH);
PRVM_G_INT( OFS_RETURN ) = PRVM_SetEngineString( outstr );
}
for( ; *set ; *out++ = *set++ );
*out++ = '\'';
- strcpy( out, in );
+ strlcpy(out, in, VM_STRINGTEMP_LENGTH);
PRVM_G_INT( OFS_RETURN ) = PRVM_SetEngineString( outstr );
}
for(i=0;i<b1->num_strings;i++)
if(b1->strings[i] && b1->strings[i][0])
{
- b2->strings[i] = (char *)Z_Malloc(strlen(b1->strings[i])+1);
+ size_t stringlen;
+ stringlen = strlen(b1->strings[i]) + 1;
+ b2->strings[i] = (char *)Z_Malloc(stringlen);
if(!b2->strings[i])
{
VM_Warning("VM_buf_copy: not enough memory for buffer %i used in %s\n", (int)PRVM_G_FLOAT(OFS_PARM1), PRVM_NAME);
break;
}
- strcpy(b2->strings[i], b1->strings[i]);
+ memcpy(b2->strings[i], b1->strings[i], stringlen);
}
}
l += strlen(b->strings[i]);
if(l>=4095)
break;
- k = strcat(k, b->strings[i]);
- if(!k)
- break;
+ strlcat(k, b->strings[i], VM_STRINGTEMP_LENGTH);
if(sep && (i != b->num_strings-1))
{
l += strlen(sep);
if(l>=4095)
break;
- k = strcat(k, sep);
- if(!k)
- break;
+ strlcat(k, sep, VM_STRINGTEMP_LENGTH);
}
}
PRVM_G_INT(OFS_RETURN) = PRVM_SetEngineString(k);
int bufindex, strindex;
qcstrbuffer_t *b;
const char *news;
+ size_t alloclen;
VM_SAFEPARMCOUNT(3, VM_bufstr_set);
}
if(b->strings[strindex])
Z_Free(b->strings[strindex]);
- b->strings[strindex] = (char *)Z_Malloc(strlen(news)+1);
- strcpy(b->strings[strindex], news);
+ alloclen = strlen(news) + 1;
+ b->strings[strindex] = (char *)Z_Malloc(alloclen);
+ memcpy(b->strings[strindex], news, alloclen);
}
/*
int bufindex, order, strindex;
qcstrbuffer_t *b;
const char *string;
+ size_t alloclen;
VM_SAFEPARMCOUNT(3, VM_bufstr_add);
}
if(b->strings[strindex])
Z_Free(b->strings[strindex]);
- b->strings[strindex] = (char *)Z_Malloc(strlen(string)+1);
- strcpy(b->strings[strindex], string);
+ alloclen = strlen(string) + 1;
+ b->strings[strindex] = (char *)Z_Malloc(alloclen);
+ memcpy(b->strings[strindex], string, alloclen);
PRVM_G_FLOAT(OFS_RETURN) = strindex;
}