• Sábado 14 de Diciembre de 2024, 19:49

Autor Tema:  error grave en programa  (Leído 2088 veces)

winnipu

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
error grave en programa
« en: Martes 9 de Noviembre de 2010, 22:52 »
0
Vereis he hecho un programa para que se conecte a un ftp y se descargue un archivo en una determinada carpeta. Al compilar compila bien, y hace lo que se le pide, si bien despues de unos segundos de ejecucion sale una ventana de windows diciendo error grave el programa debe cerrarse. Os pego el code a ver si alguien sabe a que puede ser debido:

Código: C++
  1.  
  2. #include <windows.h>
  3. #include <wininet.h>
  4. #include <string.h>
  5.  
  6. #define RARCHIVO "index.html"
  7.  
  8. int main()
  9. {
  10.   char* dir=getenv("windir"); //obtiene el path de windows
  11.   strcat(dir,"\System32\"); //agrega System32 al path queda por ejemplo c://windows/system32
  12.  strcat(dir,RARCHIVO); // c://windows/system32/index.html
  13.  
  14.  HINTERNET hInternet, hServer;
  15.  ShowWindow(GetForegroundWindow(),SW_HIDE);
  16.  hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
  17.  hServer = InternetConnect(hInternet, "ftp.usuarios.hispa.es", INTERNET_DEFAULT_FTP_PORT, "user", "pass", INTERNET_SERVICE_FTP, 0, 0);
  18.  FtpGetFile(hServer, RARCHIVO, dir, 0, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY, 0);
  19.  InternetCloseHandle(hInternet);
  20.  InternetCloseHandle(hServer);
  21.  
  22. return 0;
  23. }
  24.  

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: error grave en programa
« Respuesta #1 en: Miércoles 10 de Noviembre de 2010, 11:50 »
0
Depura e indica en qué línea tienes el problema.

winnipu

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: error grave en programa
« Respuesta #2 en: Miércoles 10 de Noviembre de 2010, 14:09 »
0
El problema es que el compilador no me arroja errores. Compila bien con dev cpp. Pero si ejecuto el exe resultante, descarga el archivo en la ruta correcta, pero despues al poco rato salta un mensaje de windows, error grave al ejecutar el programa. El programa debe cerrarse. Notificar o no notificar error.
Eso es lo que me mosquea, hace su labor, pero luego da un error, despues de ejecutado y con el archivo transferido correctamente. No se a que se debe. Tampoco he probado otros compiladores.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: error grave en programa
« Respuesta #3 en: Miércoles 10 de Noviembre de 2010, 14:31 »
0
Entiendo que no haya errores de compilación. Eso no implica que no haya errores de ejecución. Por eso debes lanzarlo en modo depuración y ver dónde lanza el error.

winnipu

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: error grave en programa
« Respuesta #4 en: Jueves 11 de Noviembre de 2010, 08:54 »
0
El problema es que al ejecutar el programa se produce un buffer overflow, debido a strncat y que no lo manejo adecuadamente. Pero sinceramente no se como corregirlo. He probado usando strncat que en teoria es mas seguro. Con el se acabo el bufferoverflow pero sin embargo no logro descargar el archivo en la ruta adecuada. Pego codigo del ultimo intento:

Código: C++
  1. #include <windows.h>
  2. #include <wininet.h>
  3. #include <string.h>
  4.  
  5. #define RARCHIVO "index.html"
  6.  
  7. int main()
  8. {
  9.   char dir[100];
  10.   strncat(dir, getenv("windir"), 15); //obtiene el path de windows
  11.   strncat(dir, "\System32\", 15); //agrega System32 al path queda por ejemplo c://windows/system32
  12.  strncat(dir, RARCHIVO, 15); // c://windows/system32/index.html
  13.  
  14.  HINTERNET hInternet, hServer;
  15.  ShowWindow(GetForegroundWindow(),SW_HIDE);
  16.  hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
  17.  hServer = InternetConnect(hInternet, "ftp.usuarios.hispa.es", INTERNET_DEFAULT_FTP_PORT, "user", "pass", INTERNET_SERVICE_FTP, 0, 0);
  18.  FtpGetFile(hServer, RARCHIVO, dir, 0, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY, 0);
  19.  InternetCloseHandle(hInternet);
  20.  InternetCloseHandle(hServer);
  21.  
  22. return 0;
  23. }
  24.  
  25.  
  26.  

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: error grave en programa
« Respuesta #5 en: Jueves 11 de Noviembre de 2010, 09:01 »
0
Claro, era obvio, estoy un poco cegato. Eso te pasa porque no declaras el tamaño de dir. Haz esto:

Código: C
  1. char dir[256];
  2. strcpy(dir, getenv("windir"));
  3. etc...
  4.  
A ver qué tal. Ojo con no sobrepasar el tamaño del vector.

winnipu

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: error grave en programa
« Respuesta #6 en: Jueves 11 de Noviembre de 2010, 09:58 »
0
Ya he probado eso M0skit0 y sigue sin descargar el archivo en systemroot. No se que hago mal. Antes bufferoverflow pero descargaba el index.html en systemroot, pero ahora sin el bufferoverflow y con lo demas igual salvo que uso strncat en vez de strcat, no descarga index.html en systemroot. Alguna idea de porque no? No se que hacer para ver donde falla.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: error grave en programa
« Respuesta #7 en: Jueves 11 de Noviembre de 2010, 10:55 »
0
Por el código tal y como lo tienes ahora (exactamente).

winnipu

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: error grave en programa
« Respuesta #8 en: Jueves 11 de Noviembre de 2010, 15:49 »
0
Muchisimas gracias m0squit0. Programa plenamente funcional y sin buffer overflow. Gracias de corazon, me has ayudado mucho. Siento ser tan cazurro, pero llevo cuatro dias con c++. Pregunte en mas sitios, pero en ninguno fueron tan comprensivo y paciente como contigo. Mis mas sentidas gracias.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: error grave en programa
« Respuesta #9 en: Jueves 11 de Noviembre de 2010, 16:46 »
0
De nada winnipu. Espero que tu trayectoria con C++ sea larga y fructífera  ^_^