Hi friends,
I have been writing one c code to validate any url passed by a user.
Here is the code I have so far coded.
I am using one dictionary file to check values like http, https, www, ftp, etc for the URL that a user will pass for validation.
My code so far holds good for every thing except for if blank spaces or a new line character or a tab is mentioned in the URL string passed by user. I m getting a segmentation fault.
Please Help me.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define SIZE 50
char *domain1 = "com";
char *domain2 = "co.in";
char *domain3 = "org";
char *domain4 = "net";
char *domain5 = "in";
char *domain6 = "org.net";
static bool f_valid = 0;
bool matchURL(char *url, FILE *fp)
{
int j = 0;
int k = 0;
char buff;
char *token1;
char token2 = {0};
char token3 = {0};
char *delimeter = ".";
token1 = strtok(url,delimeter);
while ((fscanf(fp,"%s",buff)) != EOF)
{
if(0 == strcmp(buff,token1))
{
f_valid = 1;
}
else
{
f_valid = 0;
}
}
j = 1 + strlen(token1);
if (1 == f_valid)
{
while(url[j] != '.')
{
token2[k] = url[j];
j++;
k++;
}
}
if ((0 == strlen(token2)) || (0 == strcmp("www",token2)))
{
f_valid = 0;
}
j = 2 + (strlen(token1)+strlen(token2));
k = 0;
while(url[j] != '\0')
{
token3[k] = url[j];
j++;
k++;
}
if(1 == f_valid)
{
if((0 == strcmp(domain1,token3)) || (0 == strcmp(domain2,token3)) || (0 == strcmp(domain3,token3)) || (0 == strcmp(domain4,token3)) || (0 == strcmp(domain5,token3)) || (0 == strcmp(domain6,token3)))
{
f_valid = 1;
}
else
{
f_valid = 0;
}
}
return f_valid;
}
int main ()
{
int i = 0;
char url;
FILE *fp;
if ((fp=fopen("Dictionary", "r")) == NULL)
{
printf("Can't Validate\tDictionary File is missing\n");
return -1;
}
printf("Enter the URL to Validate :\n");
scanf("%s",url);
for(i; i < strlen(url); i++)
{
if ((url == '@') || (url == '!') || (url == '#') || (url == '$') || (url == '%') || (url == '^') || (url == '&') || (url == '*') || (url == '(') || (url == ')') || (url == '\t') || (url == '\b') || (url == '\n'))
{
printf("Invaild URL\nSpecial Character Found!\n");
return -1;
}
}
if ( 1 == matchURL(url,fp))
{
printf("Valid URL address\n");
}
else
printf ("Invalid URL address\n");
fclose(fp);
return 0;
}