This bug was first found here:
http://cs50.stackexchange.com/questions/21805/pset6-server2-load-fseek-return-1
I posted it here to distinguish it from that other bug.

**Check50:**

    $ check50 2015.fall.pset6.server2 server.c
    :) server.c exists
    :) server compiles
    :) Requesting cat.jpg returns 200, image/jpeg, and correct image
    :) Requesting cat.html returns 200, text/html, and correct file
    :) Requesting cat2.HTML returns 200, text/html, and correct file
    :) Requesting cat3.HtMl returns 200, text/html, and correct file
    :) Requesting cat.gif returns 200, image/gif, and correct file
    :) Requesting favicon.ico returns 200, image/x-icon, and correct file
    :) Requesting test.css returns 200, text/css, and correct file
    :) Requesting test.js returns 200, text/javascript, and correct file
    :) Requesting hello.php returns 200, text/html, and correct output
    :( Requesting hello.php? returns 200, text/html, and correct output
       \ expected output, not an exit code of 0
    :) Requesting hello.php?name=Alice returns 200, text/html, and correct output
    :) Requesting /test redirects to /test/
    :( Requesting /test/ outputs /test/index.html
    :( Requesting directory containing index.php outputs index.php
       \ expected output, but not "HTTP/1.1 200 OK\r\nContent-Type: text/h..."
    :) Requesting two files in a row (cat.html then cat.jpg) succeeds
    https://sandbox.cs50.net/checks/87a83dbe920d4d5aac13a6ca5fb770f3

`parse`:

    bool parse(const char* line, char* abs_path, char* query)
    {
    	char line_cp[strlen(line) + 1];
    	strcpy(line_cp, line);
    
    	int i;
    	int x;
    	for (i = 0, x = 0; line[i]; i++) {
    		if (line[i] == ' ') {
    			x++;
    		}
    	}
    	if (x != 2) {
    		error(400);
    		return false;
    	}
    
    	char *mth_t = strtok(line_cp, " ");
    	char mth[strlen(mth_t) + 1];
    	strcpy(mth, mth_t);
    
    	char *rqt_t = strtok(NULL, " ");
    	char rqt[strlen(rqt_t) + 1];
    	strcpy(rqt, rqt_t);
    
    	char *ver_t = strtok(NULL, "\r\n\r\n");
    	char ver[strlen(ver_t) + 1];
    	strcpy(ver, ver_t);
    
    	if (strcmp(mth, "GET")) {
    		error(405);
    		return false;
    	}
    
    	if (rqt[0] != '/') {
    		error(501);
    		return false;
    	}
    
    	for (i = 0, x = 0; rqt[i]; i++) {
    		if (rqt[i] == '"') {
    			x++;
    		}
    	}
    	if (x) {
    		error(400);
    		return false;
    	}
    
    	if (strcmp(ver, "HTTP/1.1")) {
    		error(505);
    		return false;
    	}
    
    	for (i = 0, x = 0; rqt[i]; i++) {
    		if (rqt[i] == '?') {
    			x++;
    		}
    	}
    	if (x == 1) {
    		char *pth_t = strtok(rqt, "?");
    		//char pth[strlen(pth_t) + 1];
    		strcpy(abs_path, pth_t);
    
    		char *qry_t = strtok(NULL, "?");
    		//char qry[strlen(qry_t) + 1];
    		strcpy(query, qry_t);
    		return true;
    	} else if (!x) {
    		strcpy(abs_path, rqt);
    		strcpy(query, "");
    		return true;
    	} else {
    		error(501);
    		return false;
    	}
    
    	error(501);
    	return true;
    }

When I run manually those unhappy **check50** queries, I get good results. I just don't know why **check50** is complaining.