static int _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){ int i; int vendorlen=oggpack_read(opb,32); if(vendorlen<0)goto err_out; vc->vendor=(char *)_ogg_calloc(vendorlen+1,1); _v_readstring(opb,vc->vendor,vendorlen); vc->comments=oggpack_read(opb,32); if(vc->comments<0)goto err_out; vc->user_comments=(char **)_ogg_calloc(vc->comments+1,sizeof(*vc->user_comments)); vc->comment_lengths=(int *)_ogg_calloc(vc->comments+1, sizeof(*vc->comment_lengths)); for(i=0;i<vc->comments;i++){ int len=oggpack_read(opb,32); if(len<0)goto err_out; vc->comment_lengths[i]=len; vc->user_comments[i]=(char *)_ogg_calloc(len+1,1); _v_readstring(opb,vc->user_comments[i],len); } if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */ return(0); err_out: vorbis_comment_clear(vc); return(OV_EBADHEADER); }
static int _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){ int i; int vendorlen; vendorlen=oggpack_read(opb,32); if(vendorlen<0)goto err_out; if(vendorlen>opb->storage-oggpack_bytes(opb))goto err_out; vc->vendor=(char *)_ogg_calloc(vendorlen+1,1); if(vc->vendor==NULL)goto err_out; _v_readstring(opb,vc->vendor,vendorlen); i=oggpack_read(opb,32); if(i<0||i>=INT_MAX||i>(opb->storage-oggpack_bytes(opb))>>2)goto err_out; vc->user_comments=(char **)_ogg_calloc(i+1,sizeof(*vc->user_comments)); vc->comment_lengths=(int *)_ogg_calloc(i+1, sizeof(*vc->comment_lengths)); if(vc->user_comments==NULL||vc->comment_lengths==NULL)goto err_out; vc->comments=i; for(i=0;i<vc->comments;i++){ int len=oggpack_read(opb,32); if(len<0||len>opb->storage-oggpack_bytes(opb))goto err_out; vc->comment_lengths[i]=len; vc->user_comments[i]=(char *)_ogg_calloc(len+1,1); if(vc->user_comments[i]==NULL){ vc->comments=i; goto err_out; } _v_readstring(opb,vc->user_comments[i],len); } if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */ return(0); err_out: vorbis_comment_clear(vc); return(OV_EBADHEADER); }
static int BURGERCALL _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){ int i; int vendorlen=oggpack_read(opb,32); if(vendorlen>=0) { vc->vendor=static_cast<char *>(AllocAPointerClear(vendorlen+1)); _v_readstring(opb,vc->vendor,vendorlen); vc->comments=oggpack_read(opb,32); if(vc->comments>=0) { vc->user_comments=static_cast<char **>(AllocAPointerClear((vc->comments+1)*sizeof(*vc->user_comments))); vc->comment_lengths=static_cast<int *>(AllocAPointerClear((vc->comments+1)*sizeof(*vc->comment_lengths))); for(i=0;i<vc->comments;i++){ int len=oggpack_read(opb,32); if(len<0)goto err_out; vc->comment_lengths[i]=len; vc->user_comments[i]=static_cast<char *>(AllocAPointerClear(len+1)); _v_readstring(opb,vc->user_comments[i],len); } if (oggpack_read1(opb)==1) {/* EOP check */ return(0); } } } err_out: vorbis_comment_clear(vc); return(OV_EBADHEADER); }
TarkinError tarkin_synthesis_headerin (TarkinInfo * vi, TarkinComment * vc, ogg_packet * op) { oggpack_buffer opb; if (op) { oggpack_readinit (&opb, op->packet, op->bytes); /* Which of the three types of header is this? */ /* Also verify header-ness, tarkin */ { char buffer[6]; int packtype = oggpack_read (&opb, 8); memset (buffer, 0, 6); _v_readstring (&opb, buffer, 6); if (memcmp (buffer, "tarkin", 6)) { /* not a tarkin header */ return (-TARKIN_NOT_TARKIN); } switch (packtype) { case 0x01: /* least significant *bit* is read first */ if (!op->b_o_s) { /* Not the initial packet */ return (-TARKIN_BAD_HEADER); } if (vi->inter.numerator != 0) { /* previously initialized info header */ return (-TARKIN_BAD_HEADER); } return (_tarkin_unpack_info (vi, &opb)); case 0x03: /* least significant *bit* is read first */ if (vi->inter.denominator == 0) { /* um... we didn't get the initial header */ return (-TARKIN_BAD_HEADER); } return (_tarkin_unpack_comment (vc, &opb)); case 0x05: /* least significant *bit* is read first */ if (vi->inter.numerator == 0 || vc->vendor == NULL) { /* um... we didn;t get the initial header or comments yet */ return (-TARKIN_BAD_HEADER); } return (_tarkin_unpack_layer_desc (vi, &opb)); default: /* Not a valid tarkin header type */ return (-TARKIN_BAD_HEADER); break; } } } return (-TARKIN_BAD_HEADER); }
static int _tarkin_unpack_comment (TarkinComment * vc, oggpack_buffer * opb) { int i; int vendorlen = oggpack_read (opb, 32); #ifdef DBG_OGG printf ("dbg_ogg: Decoding comment: "); #endif if (vendorlen < 0) goto err_out; vc->vendor = _ogg_calloc (vendorlen + 1, 1); _v_readstring (opb, vc->vendor, vendorlen); vc->comments = oggpack_read (opb, 32); if (vc->comments < 0) goto err_out; vc->user_comments = _ogg_calloc (vc->comments + 1, sizeof (*vc->user_comments)); vc->comment_lengths = _ogg_calloc (vc->comments + 1, sizeof (*vc->comment_lengths)); for (i = 0; i < vc->comments; i++) { int len = oggpack_read (opb, 32); if (len < 0) goto err_out; vc->comment_lengths[i] = len; vc->user_comments[i] = _ogg_calloc (len + 1, 1); _v_readstring (opb, vc->user_comments[i], len); } if (oggpack_read (opb, 1) != 1) goto err_out; /* EOP check */ #ifdef DBG_OGG printf ("Success, read %d comments\n", vc->comments); #endif return (0); err_out: #ifdef DBG_OGG printf ("Failed\n"); #endif tarkin_comment_clear (vc); return (-TARKIN_BAD_HEADER); }
int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,ogg_packet *op){ oggpack_buffer opb; if(op){ oggpack_readinit(&opb,op->packet); /* Which of the three types of header is this? */ /* Also verify header-ness, vorbis */ { char buffer[6]; int packtype=oggpack_read(&opb,8); memset(buffer,0,6); _v_readstring(&opb,buffer,6); if(memcmp(buffer,"vorbis",6)){ /* not a vorbis header */ return(OV_ENOTVORBIS); } switch(packtype){ case 0x01: /* least significant *bit* is read first */ if(!op->b_o_s){ /* Not the initial packet */ return(OV_EBADHEADER); } if(vi->rate!=0){ /* previously initialized info header */ return(OV_EBADHEADER); } return(_vorbis_unpack_info(vi,&opb)); case 0x03: /* least significant *bit* is read first */ if(vi->rate==0){ /* um... we didn't get the initial header */ return(OV_EBADHEADER); } return(_vorbis_unpack_comment(vc,&opb)); case 0x05: /* least significant *bit* is read first */ if(vi->rate==0 || vc->vendor==NULL){ /* um... we didn;t get the initial header or comments yet */ return(OV_EBADHEADER); } return(_vorbis_unpack_books(vi,&opb)); default: /* Not a valid vorbis header type */ return(OV_EBADHEADER); break; } } } return(OV_EBADHEADER); }
int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,ogg_packet *op,unsigned int newpack) { int packtype; oggpack_buffer opb; char buffer[6]; if(op){ if(newpack) oggpack_readinit(&opb,op->packet,op->bytes); packtype=oggpack_read24(&opb,8); _v_readstring(&opb,buffer,6); if(memcmp(buffer,"vorbis",6)!=0) return(OV_ENOTVORBIS); switch(packtype){ case 0x01: if(!op->b_o_s) return(OV_EBADHEADER); if(vi->rate!=0) return(OV_EBADHEADER); return(_vorbis_unpack_info(vi,&opb)); case 0x03: if(vi->rate==0) return(OV_EBADHEADER); #ifdef MPXPLAY if(!newpack) _vorbis_skip_comment(&opb); return(0); // comments are readed at Ogg demuxing in Mpxplay #else return(_vorbis_unpack_comment(vc,&opb)); #endif case 0x05: if(vi->rate==0) return(OV_EBADHEADER); #ifndef MPXPLAY if(vc->vendor==NULL) return(OV_EBADHEADER); #endif return(_vorbis_unpack_books(vi,&opb)); default: return(OV_EBADHEADER); break; } } return(OV_EBADHEADER); }
static int _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){ int vendorlen; vendorlen=oggpack_read(opb,32); if(vendorlen<0)goto err_out; if(vendorlen>opb->storage-oggpack_bytes(opb))goto err_out; vc->vendor=(char *)_ogg_calloc(vendorlen+1,1); if(vc->vendor==NULL)goto err_out; _v_readstring(opb,vc->vendor,vendorlen); vc->comments=0; /* ROCKBOX: the meat of this function was deleted as we don't need it */ return(0); err_out: vorbis_comment_clear(vc); return(OV_EBADHEADER); }
/* Is this packet a vorbis ID header? */ int vorbis_synthesis_idheader(ogg_packet *op){ oggpack_buffer opb; char buffer[6]; if(op){ oggpack_readinit(&opb,op->packet,op->bytes); if(!op->b_o_s) return(0); /* Not the initial packet */ if(oggpack_read(&opb,8) != 1) return 0; /* not an ID header */ memset(buffer,0,6); _v_readstring(&opb,buffer,6); if(memcmp(buffer,"vorbis",6)) return 0; /* not vorbis */ return 1; } return 0; }