memcpy(fin, fmt0, amount);
memcpy(fin, fmt0, (size_t)amount);
static int cvt_f(SprintfState *ss, double d, const char *fmt0, const char *fmt1){    char fin[20];    char fout[300];    int amount = fmt1 - fmt0;    JS_ASSERT((amount > 0) && (amount < sizeof(fin)));    if (amount >= sizeof(fin)) {	/* Totally bogus % command to sprintf. Just ignore it */	return 0;    }    memcpy(fin, fmt0, amount);    fin[amount] = 0;    /* Convert floating point using the native sprintf code */#ifdef DEBUG    {        const char *p = fin;        while (*p) {            JS_ASSERT(*p != 'L');            p++;        }    }#endif    sprintf(fout, fin, d);    /*    ** This assert will catch overflow's of fout, when building with    ** debugging on. At least this way we can track down the evil piece    ** of calling code and fix it!    */    JS_ASSERT(strlen(fout) < sizeof(fout));    return (*ss->stuff)(ss, fout, strlen(fout));}