Check 50 returns a lot of errors https://sandbox.cs50.net/checks/caefd03d8ac2485b820743724297b846 

My load function

        /**
         * Loads a file into memory dynamically allocated on heap.
         * Stores address thereof in *content and length thereof in *length.
         */
        bool load(FILE* file, BYTE** content, size_t* length)
        {
            if(file == NULL)
            {
                return false;
            }
        //Allocate memory on heap
        BYTE* buffer = malloc(sizeof(BYTE)*500);
        *content = NULL;
        int  count = 0;
        size_t c;
        
        //Read characters from file
       while((c = fgetc(file)) != EOF)
        {
            if( count%500 == 0)
                {
                    buffer = (BYTE* )realloc(buffer, sizeof(BYTE)*(500 +count));
                }
            buffer[count] = c;    
            count++;
        }
         *content = buffer;
        *length = count;
        
    return true;
    }  
        
My indexes function
        
        /**
         * Checks, in order, whether index.php or index.html exists inside of path.
         * Returns path to first match if so, else NULL.
         */
        char* indexes(const char* path)
        {
          char* php = "index.php";
     char* html = "index.html";
     char* path2 = (char* )malloc(sizeof(strlen(php) + strlen(html) + 1));
     
     strcpy(path2,path);
     if(strcmp(&path2[strlen(path) - 1],"/") != 0)
        {
            strcat(path2, "/");
        }
     
     //concatenate "index.php" to the path and check if it exists
     strcat(path2,php);
     if(strstr(path2,php) != NULL)
        {
           if(access(path2,F_OK) != -1)
                {
                    free(path2);
                    return path2;
                }
        }
        //Concatenate "index.html" to the path and check if it exists
     else 
        {
           strcat(path2,html);
           if(strstr(path2,html) != NULL)
            {
                if(access(path2,F_OK) != -1)
                    {
                        free(path2);
                        return path2;
                    }
            }
            else
                {
                    return NULL;
                }
        }
      return path2;  
     }

My parse and lookup function(Got it corrected through check50 test 1)

    /**
     * Returns MIME type for supported extensions, else NULL.
     */
    const char* lookup(const char* path)
    {
        // http://www.tutorialspoint.com/c_standard_library/c_function_strchr.htm
        const char ch = '.';

        //Stores string after the .
        char* end =  strchr(path,ch);

        //Initialize string for storing the return value
        char* ret;

        //Check the file extension
        if(strcasecmp(end,"css") == 0)
        {
            ret = "text/css";
            return ret;
        }
        if(strcasecmp(end,"html") == 0)
        {
            ret = "text/html";
            return ret;
        }

        if(strcasecmp(end,"gif") == 0)
        {
            ret = "image/gif";
            return ret;
        }

        if(strcasecmp(end,"ico") == 0)
        {
            ret = "image/x-icon";
            return ret;
        }

        if(strcasecmp(end,"jpg") == 0)
        {
            ret = "image/jpeg";
            return ret;
        }

        if(strcasecmp(end,"js") == 0)
        {
            ret = "text/javascript";
            return ret;
        }

        if(strcasecmp(end,"php") == 0)
        {
            ret = "text/x-php";
            return ret;
        }

        if(strcasecmp(end,"png") == 0)
        {
            ret = "image/png";
            return ret;
        }
        else
            return NULL;


    }

    /**
     * Parses a request-line, storing its absolute-path at abs_path
     * and its query string at query, both of which are assumed
     * to be at least of length LimitRequestLine + 1.
     */
    bool parse(const char* line, char* abs_path, char* query)
    {
        // TODO
        /* Request-line consists of method SP request-target SP HTTP-version CRLF*/
        //The request target consists of the absolute path and the query in this form : absolute-path [ "?" query ]
        //We will use strtok to store tokens in different strings
        //Referenced from stackoverflow and tutorialspoint.com
        //Copy the line into  a new string
        char *l = strdup(line);

        //Token to store method
        char* method = strtok(l, " ");

        //Token to store request target
        char *request = strtok(NULL," ");

        //Store the HTTP version in a token
        char* http = strtok(NULL,"\r\n ");

        //Store the absolute path in a token
        char* abs_path1 = strtok(request,"?");

        //Store the query after ? in a token
        char* query1 = strtok(NULL,"?");
        if(query1 == NULL)
            query1 = "";

        strcpy(query,query1);
        strcpy(abs_path,abs_path1);

        if (strcmp(method, "GET") != 0)
        {
            error(405);
            return false;
        }
        if (strchr(query, '"'))
        {
            error(400);
            return false;
        }
        if (request[0] != '/')
        {
            error(501);
            return false;
        }
        if (strstr(request, "/ ") != 0)
        {
            error(404);
            return false;
        }
        if (strcmp(http, "HTTP/1.1") != 0)
        {
            error(505);
            return false;
        }

        return true;
    }