Example #1
0
static void extrmultipartdata(unsigned char *inbuf, char *partsep,
			      formfield **fields, int maxcount,int *count)
{
  formfield *temparray;
  formfield *tempfield;
  unsigned char *p;
  unsigned char *dstart, *dend;
  int i,len;

  temparray=(formfield *)malloc(maxcount*sizeof(formfield));
  p=inbuf;
  *count=0;
  while(((p=skipsep(p, partsep))!=NULL) && (*count<maxcount)) {
    (*count)++;
    tempfield=&temparray[*count-1];

    getfieldinfo(p,&tempfield->name, &tempfield->attr);
    //    printf("f: %s<br>\n",tempfield->name);

    dstart=skippartheader(p);
    //    printf("d: %c%c%c%c<br>\n",dstart[0],dstart[1],dstart[2],dstart[3]);

    dend=skipdata(dstart,partsep);
    len=dend-dstart;

    tempfield->len=len;
    tempfield->data=(unsigned char *)malloc(len+1);
    for(i=0; i<len; i++) 
      tempfield->data[i]=dstart[i];
    tempfield->data[len]=0;

    p=dend+2;
  }
  
  (*fields)=(formfield *)malloc((*count)*sizeof(formfield));
  for(i=0; i<*count; i++)
    (*fields)[i]=temparray[i];
  free(temparray);
}
Example #2
0
static int
print_jfif() {
	int major, minor, density, x, y, r, tx, ty ;
	r = rb(1); if (r == -1) return -1;

	major = rb(1);
	if (major == -1) return -1;
	minor = rb(1);
	if (minor == -1) return -1;
	density = rb(1);
	if (density == -1) return -1;

	x = rb(1); if (x == -1) return -1;
	r = rb(1); if (r == -1) return -1;
	x = (x << 8) | r;

	y = rb(1); if (y == -1) return -1;
	r = rb(1); if (r == -1) return -1;
	y = (y << 8) | r;
	tx = rb(1); if (tx == -1) return -1;
	ty = rb(1); if (ty == -1) return -1;
	fprintf(stderr,"JFIF v%d.%d, dens %d, %dx%d, tn %dx%d\n", major, minor, density, x, y, tx, ty);
	return skipdata(tx * ty * 3,1);
}
Example #3
0
int
main(int argc, char **argv) {
	int m, len;

	m = getmarker();
	if (m != SOI) {
		fprintf(stderr,":unknown, aborting.\n"); 
		return 1;
	}
	fprintf(stderr,":SOI\n");
	while (1) {
		m = getmarker();
		if (m == -1) {
			fprintf(stderr,":Error, end of file, aborting.\n");
			break;
		}
		if (haslength(m))
			len = getlength();
		else
			len = 0;
		switch (m) {
		case COM: {
			char *comment;
			
			comment = malloc(len - 2 + 1);
			comment[len-2]='\0';
			if (-1 == rd(len - 2, comment))
				break;
			fprintf(stderr,":COM(%s)\n",comment);
			break;
		}
		case SOS: {
			int i,ns,ss,se,ahl,cs,td;

			ns = rb(1);if (ns == -1) break;
			fprintf(stderr,":SOS ");
			for (i=0;i<ns;i++) {
				cs = rb(1);if (cs == -1) break;
				td = rb(1);if (td == -1) break;
				fprintf(stderr,"[%d,%d:%d]",cs,(td>>4),td&0xf);
			}
			ss = rb(1); if (ss == -1) break;
			se = rb(1); if (se == -1) break;
			ahl = rb(1); if (ahl == -1) break;
			fprintf(stderr,"ss=%d, se=%d, h=%d,l=%d\n",ss,se,(ahl>>4),ahl&0xf);
			break;
		}
		case SOF0: {
			int bitcnt,x,y,nf,i,c,hv,tq;
			m = rb(1); if (m == -1) break;
			bitcnt = m;
			y = rb(1); if (y == -1) break;
			m = rb(1); if (m == -1) break;
			y = (y<<8) | m;
			x = rb(1); if (x == -1) break;
			m = rb(1); if (m == -1) break;
			x = (x<<8) | m;
			nf = rb(1); if (nf == -1) break;

			fprintf(stderr,":SOF0,bitcnt=%d,x=%d,y=%d:\n",bitcnt,x,y);
			for (i=0;i<nf;i++) {
				c = rb(1); if (c == -1) break;
				hv = rb(1); if (hv == -1) break;
				tq = rb(1); if (tq == -1) break;
				fprintf(stderr,"\t %02x = %d:%d, tq=%d\n",c,(hv>>4),hv&0xf,tq);
			}
			break;
		}
		case DHT: {
			m = rb(1);
			if (m == -1) break;
			fprintf(stderr,":DHT(0x%02x)\n",m);
			skipdata(len - 2 - 1,1);
			break;
		}
		case DQT: {
			fprintf(stderr,":DQT\n");
			skipdata(len-2,1);
			break;
		}
		case APP1: case APP2:
		case APP0: {
			char name[5];
			fprintf(stderr,":APP0(");
			if (-1==rd(4,name))
				break;
			name[4] = '\0';
			fprintf(stderr,"%s):", name);
			if (!strcmp(name,"JFIF")) {
				print_jfif();
			} else {
				if (-1==skipdata(len - 2 - 4,0)) {
					break;
				}
				fprintf(stderr,"\n");
			}
			break;
		}
		default:
			fprintf(stderr,":Unknown marker\n");
			if (len) {
				if (-1==skipdata(len - 2,0)) {
					break;
				}
				fprintf(stderr,"\n");
			}
			break;
		}
	}
	return 0;
}