logo
Contato | Sobre...        
rebarba rebarba

Rodrigo Strauss :: Blog

follow us in feedly

PREFAST rocks!

Para quem não sabe, o Prefast é um analisador estático de código fonte, que vem junto com o DDK do Windows Server 2003. Ele foi feito para pegar erros de lógica, que o compilador não pega. Olhe esse código:

NTSTATUS s; IO_STACK_LOCATION* pIrpSp; pIrpSp = IoGetCurrentIrpStackLocation(Irp); ... switch(pIrpSp->MinorFunction) { case FUNC1: s = OnConnect(DeviceObject,Irp,NextDevice); break; case FUNC2: OnDisconnect(DeviceObject,Irp,NextDevice); break; default: IoSkipCurrentIrpStackLocation(Irp); s = IoCallDriver(NextDevice,Irp); } return s;

Achou o erro? O PREFAST achou. Olhe o log dele:

dispatch.cpp(197) : warning 1: Using uninitialized memory 's'. problem occurs in function 'OnDeviceInternalIoControl' Path includes 6 statements on the following lines: 177 178 180 182 189 197

A linha 197 é a que chama "OnDisconnect". Repare bem que o retorno dessa função não é atribuído à variável s. Caso o valor de "pIrpSp->MinorFunction" seja "FUNC2", a variável s nunca seria inicializada, e minha função retornaria o lixo que estivesse na pilha.


Em 13/08/2004 04:22, por Rodrigo Strauss


  
 
 
Comentários
Algo a dizer?
Nome:


Site:


E-mail:


Escreva o número vinte e seis:


 Não mostre meu e-mail no site, não serve pra nada mesmo...

Comentário





Os comentários devem ser sobre assuntos relativos ao post, eu provavelmente apagarei comentários totalmente offtopic. Se quiser me enviar uma mensagem, use o formulário de contato. E não esqueça: isso é um site pessoal e eu me reservo o direito de apagar qualquer comentário ofensivo ou inapropriado.
rebarba rebarba
  ::::